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.
Eche un vistazo aquí: http://stackoverflow.com/questions/4400169 –
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'. –