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

时间:2010-12-10 20:22:23

标签: java hibernate jpa data-modeling

假设我有以下实体为订阅者建模并使用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_IDORG_IDSUBSCRIPTION_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。

1 个答案:

答案 0 :(得分:0)

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

您是否计划从代码中创建表的索引?您应该可以使用hibernate.hbm2ddl.auto = create