假设我有以下实体,它为订阅者建模并使用 CollectionTable
来为订阅列表建模,如下所示:
@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;
}
因此,这将创建一个包含 PERSON_ID
、ORG_ID
和 SUBSCRIPTION_NAME
列的表。
我正在尝试在 SUBSCRIPTION_NAME
列上创建数据库索引。但是,如果我将以下注释放在 _subscriptionNames
上:
@org.hibernate.annotations.Index( name="subscription_idx", columnNames={"SUBSCRIPTION_NAMES"} )
我得到一个异常(exception):
org.hibernate.MappingException: Unable to find logical column name from physical name null in table SUBSCRIBER
我还尝试在 Subscriber
实体上使用 org.hibernate.annotations.Table
注释,但似乎没有办法让它引用 PERSON_ORG_SUBSCRIPTIONS
表。
我正在使用 Hibernate 3.5.3 和 PostgreSQL 9.0。
最佳答案
SUBSCRIBER 表中是否存在名称为“SUBSCRIPTION_NAME”的列?
您是否打算通过代码在表上创建索引?你应该适本地使用 hibernate.hbm2ddl.auto=create
关于java - 使用 Hibernate 在 CollectionTable 的列上创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412960/