使用Hibernate在CollectionTable的列上创建索引

gnu*_*nuf 5 java hibernate jpa data-modeling

假设我有以下实体为订户建模并使用a 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;
}
Run Code Online (Sandbox Code Playgroud)

所以这创建了一个包含列的表PERSON_ID,ORG_IDSUBSCRIPTION_NAME.

我正在尝试在SUBSCRIPTION_NAME列上创建数据库索引.但是如果我把以下注释放在_subscriptionNames:

@org.hibernate.annotations.Index( name="subscription_idx", columnNames={"SUBSCRIPTION_NAMES"} )
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

org.hibernate.MappingException: Unable to find logical column name from physical name null in table SUBSCRIBER
Run Code Online (Sandbox Code Playgroud)

我也尝试org.hibernate.annotations.TableSubscriber实体上使用注释,但似乎没有办法让它引用该PERSON_ORG_SUBSCRIPTIONS表.

我正在使用Hibernate 3.5.3和PostgreSQL 9.0.

小智 0

SUBSCRIBER 表中是否存在名为“SUBSCRIPTION_NAME”的列?

您打算通过代码在表上创建索引吗?您应该正确使用 hibernate.hbm2ddl.auto=create