2010-12-10 16 views
5

Supongamos que tengo la siguiente entidad que los modelos de un suscriptor y utiliza un CollectionTable para modelar una lista de suscripciones de este modo:Crear un índice en una columna de una CollectionTable usando Hibernate

@Entity 
@Table(name = "SUBSCRIBER") 
public class Subscriber { 
    @ElementCollection 
    @CollectionTable(name = "PERSON_ORG_SUBSCRIPTIONS", 
        joinColumns = { @JoinColumn(name = "PERSON_ID", referencedColumnName = "PERSON_ID"), 
            @JoinColumn(name = "ORG_ID", referencedColumnName = "ORG_ID") }) 
    @Column(name = "SUBSCRIPTION_NAME") 
    protected Set<String> _subscriptionNames; 
} 

Así que esto crea una tabla con columnas para PERSON_ID, ORG_ID y SUBSCRIPTION_NAME.

Estoy tratando de crear un índice de base de datos en la columna SUBSCRIPTION_NAME. Pero si pongo la siguiente anotación en _subscriptionNames:

@org.hibernate.annotations.Index(name="subscription_idx", columnNames={"SUBSCRIPTION_NAMES"}) 

consigo una excepción:

org.hibernate.MappingException: Unable to find logical column name from physical name null in table SUBSCRIBER 

También he intentado usar la anotación org.hibernate.annotations.Table en la entidad Subscriber, pero no parece ser una forma para hacer que haga referencia a la tabla PERSON_ORG_SUBSCRIPTIONS.

Estoy usando Hibernate 3.5.3 y PostgreSQL 9.0.

+0

Eche un vistazo aquí: http://stackoverflow.com/questions/4400169 –

+0

Eventualmente, abandoné la creación de algunos índices en Hibernate 4.2 y anteriores. Hibernate 4.3 admitirá JPA 2.1, que admite 'indexes' dentro de' @ JoinTable'. –

Respuesta

0

¿La columna con el nombre "SUBSCRIPTION_NAME" está presente en la tabla SUBSCRIBER?

¿Está planeando crear un índice en la tabla desde el código? Debería usar de forma provechosa hibernate.hbm2ddl.auto = create

Cuestiones relacionadas