2010-12-10 10 views
5
kullanarak CollectionTable bir sütun üzerinde dizin oluşturma

varsayalım ben şöyle aboneliklerin listesini modellemek için bir CollectionTable kullanan modeller bir abone ve aşağıdaki varlık var: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; 
} 

Yani bu bir tablo ile oluşturur PERSON_ID, ORG_ID ve SUBSCRIPTION_NAME için sütunlar.

SUBSCRIPTION_NAME sütununda bir veritabanı dizini oluşturmaya çalışıyorum. Ben _subscriptionNames aşağıdaki ek açıklamayı koyarsanız Ama:

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

istisna almak:

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

Ben de Subscriber varlık üzerinde org.hibernate.annotations.Table ek açıklama kullanarak çalıştı, ancak bir yol olarak görünmüyor PERSON_ORG_SUBSCRIPTIONS tablosuna başvurmak için.

Hibernate 3.5.3 ve PostgreSQL 9.0 kullanıyorum.

+0

oluştur Burada bir göz atın: http://stackoverflow.com/questions/4400169 –

+0

Sonunda, Hibernate 4.2 ve önceki bazı dizinler yapmaktan vazgeçtim. Hazırda Bekletme 4.3, 'JoinTable' içinde 'indeksleri' destekleyen JPA 2.1'i destekleyecektir. –

cevap

0

"SUBSCRIPTION_NAME" adındaki sütun SUBSCRIBER tablosunda mevcut mu?

Koddaki tablodan dizin oluşturmayı mı planlıyorsunuz? Kullanılabilir hibernate.hbm2ddl.auto = kullanmalısınız