Załóżmy, że mam następujący podmiot, który modele abonenta i używa CollectionTable
modelować listę subskrypcji tak:Tworzenie indeksu na kolumnie CollectionTable wykorzystaniem 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;
}
Więc ta tworzy tabelę z kolumny dla PERSON_ID
, ORG_ID
i SUBSCRIPTION_NAME
.
Próbuję utworzyć indeks bazy danych na kolumnie SUBSCRIPTION_NAME
. Ale jeśli mogę umieścić następującą adnotację na _subscriptionNames
:
@org.hibernate.annotations.Index(name="subscription_idx", columnNames={"SUBSCRIPTION_NAMES"})
uzyskać wyjątek:
org.hibernate.MappingException: Unable to find logical column name from physical name null in table SUBSCRIBER
Próbowałem też za pomocą org.hibernate.annotations.Table
adnotacji o podmiocie Subscriber
, ale nie wydaje się być sposobem mieć odniesienie do tabeli PERSON_ORG_SUBSCRIPTIONS
.
Używam Hibernuj 3.5.3 i PostgreSQL 9.0.
Spójrz tutaj: http://stackoverflow.com/questions/4400169 –
Ostatecznie zrezygnowałem z tworzenia indeksów na Hibernate 4.2 i poprzednich. Hibernate 4.3 będzie obsługiwał JPA 2.1, który obsługuje 'indexes' bezpośrednio w' @ JoinTable'. –