2010-12-10 21 views
5

Giả sử tôi đã thực thể sau đó mô hình thuê bao và sử dụng một CollectionTable để mô hình một danh sách các thuê bao như vậy:Tạo một chỉ mục trên một cột của một CollectionTable sử dụng 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; 
} 

Vì vậy, điều này tạo ra một bảng với các cột cho PERSON_ID, ORG_IDSUBSCRIPTION_NAME.

Tôi đang cố tạo chỉ mục cơ sở dữ liệu trên cột SUBSCRIPTION_NAME. Nhưng nếu tôi đặt chú thích sau đây về _subscriptionNames:

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

tôi nhận được một ngoại lệ:

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

Tôi cũng đã cố gắng sử dụng org.hibernate.annotations.Table chú thích trên thực thể Subscriber, nhưng có vẻ không phải là một cách để nó tham khảo bảng PERSON_ORG_SUBSCRIPTIONS.

Tôi đang sử dụng Hibernate 3.5.3 và PostgreSQL 9.0.

+0

Hãy xem tại đây: http://stackoverflow.com/questions/4400169 –

+0

Cuối cùng, tôi đã từ bỏ việc tạo một số chỉ mục trên Hibernate 4.2 trở lên. Hibernate 4.3 sẽ hỗ trợ JPA 2.1 hỗ trợ 'indexes' ngay bên trong' @ JoinTable'. –

Trả lời

0

Cột có tên "SUBSCRIPTION_NAME" có trong bảng SUBSCRIBER không?

Bạn có dự định tạo chỉ mục trên bảng từ mã không? Bạn nên sử dụng hibernate.hbm2ddl.auto = tạo

Các vấn đề liên quan