Hibernate jpa2中是否有定义多列索引的注释

Hibernate jpa2中是否有定义多列索引的注释,hibernate,orm,jpa,jpa-2.0,Hibernate,Orm,Jpa,Jpa 2.0,Hibernate提供了一种通过定义多列索引的机制。有没有办法通过JPA或JPA2(例如,使用javax.persistence.*API)指定这是一种与ORM无关的方式?没有,正如您在中所暗示的,没有标准化的方式,您必须为此使用提供程序扩展(如果存在)。是的,可以使用JPA 2.1,如规范中所示: 第445页指出 索引注释用于模式生成 columnList(必选)要包含在索引中的列的名称 此处可以看到一个使用示例: 使用Hibernate 4.3.8和JPA 2.1集成解决了同样的问题。 看

Hibernate提供了一种通过定义多列索引的机制。有没有办法通过JPA或JPA2(例如,使用javax.persistence.*API)指定这是一种与ORM无关的方式?

没有,正如您在中所暗示的,没有标准化的方式,您必须为此使用提供程序扩展(如果存在)。

是的,可以使用JPA 2.1,如规范中所示:

第445页指出

索引注释用于模式生成

columnList(必选)要包含在索引中的列的名称

此处可以看到一个使用示例:


使用Hibernate 4.3.8和JPA 2.1集成解决了同样的问题。 看来,mjaggard的答案是正确的。但是,给定的用法示例如下所示:

@Index(name="EMP_NAME_INDEX", columnList={"F_NAME", "L_NAME"})
我不知道这是否奏效。我知道在我使用JPA2.1的例子中,
columnList
的值不是数组而是字符串。因此,对于我来说,所需的两列索引可以通过以下方式定义:

@Index(name="EMP_NAME_INDEX", columnList="F_NAME,L_NAME")

也就是说,只需使用逗号在单个字符串中分隔列名。这对我使用Postgres DBMS很有效。我进行了检查,并成功地在两列上创建了索引。

可以在JPA 2.1中声明多列索引这里是一个示例
实体
类,演示了多列索引

@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={"product_id","store_id"}))
class MyEntity {
    @Column(name="product_id")
    private String productId;

    @Column(name="store_id")
    private Long storeId;
}

请注意,
columnNames
必须是DB中列的名称,而不是属性名称。

只是想知道,根据您先前的建议,我们正在为此使用hibernate注释。当JPA已经支持单列索引注释时,支持这一点是有意义的。就我的2cents@user339108我个人同意,我希望JPA也支持这一点。也许在将来的版本中。@user339108您能为您的语句“JPA已经支持单列索引注释”提供一个示例吗。除了Hibernate提供的@Index注释之外,我找不到任何允许此操作的注释。
@Column(unique=true)
将索引强加于列。JPA2.0不支持非唯一索引。2.1+更通用。唯一约束不一定索引。