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_ID
và SUBSCRIPTION_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.
Hãy xem tại đây: http://stackoverflow.com/questions/4400169 –
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'. –