2010-12-10 11 views
5

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.

+0

Spójrz tutaj: http://stackoverflow.com/questions/4400169 –

+0

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'. –

Odpowiedz

0

Czy kolumna o nazwie "SUBSCRIPTION_NAME" znajduje się w tabeli SUBSKRYPCJA?

Czy planujesz utworzyć indeks na tablicy z kodu? Powinieneś używać hibernate.hbm2ddl.auto = stwórz

Powiązane problemy