假设我有以下实体为订阅者建模并使用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"} )
我得到一个例外:
org.hibernate.MappingException: Unable to find logical column name from physical name null in table SUBSCRIBER
我还尝试在org.hibernate.annotations.Table
实体上使用Subscriber
注释,但似乎没有办法让它引用PERSON_ORG_SUBSCRIPTIONS
表。
我正在使用Hibernate 3.5.3和PostgreSQL 9.0。
答案 0 :(得分:0)
表SUBSCRIBER中是否存在名称为“SUBSCRIPTION_NAME”的列?
您是否计划从代码中创建表的索引?您应该可以使用hibernate.hbm2ddl.auto = create