休眠:创建索引

我想在我的数据库中创建几个索引。不幸的是,我们必须将持久性提供程序从EclipseLink更改为Hibernate,但是使用javax.persistence.Index的解决方案和使用Hibernate的解决方案都不起作用

这是该类的外观:

@实体
@表(name=“我的店铺”)
公共类商店扩展BaseEntity{
@时态(TemporalType.TIMESTAMP)
@列(nullable=false)
私人日历更新;
}

这应该是javax.persistence的解决方案。*:

导入javax.persistence.Index;
导入javax.persistence.Table;
@表(name=“my_shop”,
索引[email protected](columnList=“lastupdate”)
)

Hibernate注释已被弃用,因此不使用这些注释肯定有原因:

导入org.hibernate.annotations.Index;//不赞成
导入org.hibernate.annotations.Table;
@表(…)。。。,
索引[email protected](columnNames=“lastupdate”)
)

我使用Glassfish 3.1.2.2、PostgreSQL 9.1、JPA 2.1和hibernate core 4.3.4.Final。如果我查看数据库,则没有通过psql“\d+”在特定字段上创建索引

这是my persistence.xml的外观:

。。。
<property name=“hibernate.hbm2ddl.auto”value=“create”/>
<property name=“dialogue”value=“org.hibernate.dialogue.postgresqldialdialogue”/>
...

只有EclipseLink可以轻松处理此问题:

导入org.eclipse.persistence.annotations.Index;
@实体
@表(name=“我的店铺”)
公共类商店扩展BaseEntity{
@索引
@时态(TemporalType.TIMESTAMP)
@列(nullable=false)
私人日历更新;
}

我使用@Column和@Index中的所有组合“lastupdate”、“lastupdate”和其他“name”属性测试了给定的解决方案,但似乎没有任何效果

更新1

事实上,这个解决方案是有效的:

@javax.persistence.Table(name=“my_shop”)
@表(appliesTo=“我的店铺”
,Index={@Index(columnNames=“name”,name=“name”),
@索引(columnNames=“lastupdate”,name=“lastupdate”)}
)

但是仍然org.hibernate.annotations.Index被标记为已弃用。那么,使用它还是不使用它是一种好的做法呢?如果不是的话,还有什么选择,因为显然javax.persistence.Index不起作用

org.hibernate.annotations.Index适用于所有值:创建、更新。。。
javax.persistence.Index不管“hibernate.hbm2ddl.auto”有哪个值,都不起作用

我将JPA2.1与Hibernate 4.3和PostgreSQL 9.3一起使用。我对索引没有问题

hibernate-commons-annotations-4.0.4.Final.jar
hibernate-core-4.3.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-1.1.0.Final.jar
javassist-3.18.1-GA.jar
jboss-transaction-api_1.2_spec-1.0.0.Final.jar

虽然我的配置

<property name=“hibernate.hbm2ddl.auto”value=“update”/>

这就是我的实体映射

导入javax.persistence.Entity;
导入javax.persistence.Index;
导入javax.persistence.Table;
@实体
@表(name=“users”,索引={
@索引(columnList=“id”,name=“user\u id\u hidx”),
@索引(columnList=“current\u city”,name=“cbplayer\u current\u city\u hidx”)
})

事实上,我对这些注释有一些问题。我不能为索引指定表空间,必须为单表层次结构的父类中的子类创建索引

发表评论