Este equipo de redactores ha pasado horas investigando la respuesta a tu duda, te compartimos la respuesta por esto nuestro objetivo es resultarte de mucha ayuda.
Solución:
Con JPA 2.1 deberías poder hacerlo.
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Index;
import javax.persistence.Table;
@Entity
@Table(name = "region",
indexes = @Index(name = "my_index_name", columnList="iso_code", unique = true),
@Index(name = "my_index_name2", columnList="name", unique = false))
public class Region
@Column(name = "iso_code", nullable = false)
private String isoCode;
@Column(name = "name", nullable = false)
private String name;
Actualizar: Si alguna vez necesita crear e indexar con dos o más columnas, puede usar comas. Por ejemplo:
@Entity
@Table(name = "company__activity",
indexes = @Index(name = "i_company_activity", columnList = "activity_id,company_id"))
public class CompanyActivity{
Una colección única cuidadosamente seleccionada de anotaciones de índice
= Especificaciones =
-
JPA 2.1+:
javax.persistence.Index
(o consulte JSR-000338 PDF, p. 452, elemento 11.1.23)
La JPA@Index
La anotación solo se puede usar como parte de otra anotación como@Table
,@SecondaryTable
etc.:@Table(indexes = @Index(...) )
-
JDO 2.1+:
javax.jdo.annotations.Index
= Marcos ORM =
- ♥ Hibernar ORM:
org.hibernate.annotations.Index
; - OpenJPA:
org.apache.openjpa.persistence.jdbc.Index
yorg.apache.openjpa.persistence.jdbc.ElementIndex
(ver Guía de referencia); - Eclipse Enlace:
org.eclipse.persistence.annotations.Index
; - Núcleo de datos:
org.datanucleus.api.jpa.annotations.Index
; - Carbonado (GitHub):
com.amazon.carbonado.Index
; - EBean: com.avaje.ebean.annotation.Index o io.ebean.annotation.Index ?
- Ujorm: Anotación
org.ujorm.orm.annot.Column
,index
yuniqueIndex
propiedades; - requery (GitHub. Java, Kotlin, Android): Anotación
io.requery.Index
; -
Expuesto (Biblioteca Kotlin SQL): org.jetbrains.exposed.sql.Index, org.jetbrains.exposed.sql.Table#index(). Ejemplo:
object Persons : IdTable() val code = varchar("code", 50).index()
= ORM para Android =
- ♥ ActiveAndroid: Anotación
com.activeandroid.annotation.Column
poseeindex
,indexGroups
,unique
yuniqueGroups
propiedades;
ACTUALIZAR [2018]: ActiveAndroid era un buen ORM hace 4 años, pero desafortunadamente, el autor de la biblioteca dejó de mantenerlo, por lo que alguien lo bifurcó, corrigió errores y lo renombró como ReActiveAndroid; use esto si está comenzando un nuevo proyecto o consulte la Guía de migración si desea reemplazar ActiveAndroid en un proyecto heredado. - ReActiveAndroid: Anotación
com.reactiveandroid.annotation.Column
poseeindex
,indexGroups
,unique
yuniqueGroups
propiedades; - ORMLite: Anotación
com.j256.ormlite.field.DatabaseField
tiene unindex
propiedad; - verdeDAO:
org.greenrobot.greendao.annotation.Index
; - ORMAN (GitHub):
org.orman.mapper.annotation.Index
; - ★ DBFlow (GitHub):
com.raizlabs.android.dbflow.sql.index.Index
(ejemplo de uso); - otros (muchas bibliotecas ORM en Android Arsenal).
= Otro (difícil de categorizar) =
- Realm – Base de datos alternativa para iOS / Android: Anotación
io.realm.annotations.Index
; - Empire-db: una capa de abstracción de base de datos relacional ligera pero potente basada en JDBC. No tiene definición de esquema a través de anotaciones;
- Kotlin NoSQL (GitHub): un DSL reactivo y seguro para trabajar con bases de datos NoSQL (PoC): ???
- Slick – Mapeo relacional funcional reactivo para Scala. No tiene definición de esquema a través de anotaciones.
Solo ve por uno de ellos.
JPA 2.1 (finalmente) agrega soporte para índices y extranjeros keys! Vea este blog para más detalles. JPA 2.1 es parte de Java EE 7, que ya está disponible.
Si le gusta vivir al límite, puede obtener la última instantánea de eclipselink desde su repositorio maven (groupId:org.eclipse.persistence, artefactoId:eclipselink, versión:2.5.0-SNAPSHOT). Solo para las anotaciones de JPA (que deberían funcionar con cualquier proveedor una vez que sean compatibles con 2.1), use artefacto ID: javax.persistence, versión: 2.1.0-SNAPSHOT.
Lo estoy usando para un proyecto que no estará terminado hasta después de su lanzamiento, y no he notado ningún problema horrible (aunque no estoy haciendo nada demasiado complejo con él).
ACTUALIZACIÓN (26 de septiembre de 2013): Hoy en día, las versiones de lanzamiento y candidatas a lanzamiento de eclipselink están disponibles en el repositorio central (principal), por lo que ya no tiene que agregar el repositorio de eclipselink en los proyectos de Maven. La última versión de lanzamiento es 2.5.0 pero también está presente 2.5.1-RC3. Cambiaría a 2.5.1 lo antes posible debido a problemas con la versión 2.5.0 (las cosas de modelgen no funcionan).
Te mostramos comentarios y calificaciones
Al final de la post puedes encontrar las explicaciones de otros programadores, tú además tienes el poder mostrar el tuyo si lo crees conveniente.