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

标签 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"} )

我得到一个异常(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/

相关文章:

java - 加或减 double 会给出错误的结果

java - jsp jdbc数据访问层设计

java - JPQL 查询未返回预期结果

java - 来自 Spring JPA 的 Iterable 结果的 Spliterators 是否可以安全地用于 parallelStream

java - 基本计算器帮助 Java

mysql - 使用 Eclipse 和 MySql 进行 Hibernate 逆向工程

java - 基本的 Hibernate 缓存问题

hibernate - EHCache SizeOf 警告

java - 是否可以全局更改 varchar 字段 (hbm2ddl) 的默认长度?

java - MacOS 无法识别 MacOS 10.14.6 上更新的 Java