Saltar al contenido

Especificación de un índice (clave no única) mediante JPA

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, @SecondaryTableetc.:

    @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 y org.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 y uniqueIndex 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 posee index, indexGroups, uniquey uniqueGroups 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 posee index, indexGroups, uniquey uniqueGroups propiedades;
  • ORMLite: Anotación com.j256.ormlite.field.DatabaseField tiene un index 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *