是否可以通过JPA或Hibernate注释指定给定索引应使用范围能力的索引方法(例如btree)?如果是这样,怎么样?
答案 0 :(得分:3)
虽然JPA允许您对主键(@Id)和唯一约束(@UniqueConstraint)进行建模,但它不允许您对索引进行显式建模。 JPA标准中肯定没有模型/提示索引范围或btree等功能。JPA 2.0 Spec
Hibernate通过@Index支持索引建模。这是一个例子:
@Entity
@ org.hibernate.annotations.Table(name =“Forest”,indices = {@Index(name =“idx”,columnNames = {“name”,“length”})})
公共类Forest {...}
或者对于单列索引:
公共类树{
@Index(name="story1index")
public String getLeaf() {
return leaf;
}
}
它不允许您指定“范围索引”,btree等... Hibernate Annotations 3.5
IF hibernate生成数据库模式,然后创建索引 但是,在应用合理QA的任何环境中,DB模式通常由DBA单独创建和维护,而不是通过hibernate自动模式生成。这是更好的做法,因为它允许DBA根据需要精确定义所有物理属性 - 就像您在Q中要求的物理属性类型;-)。然后,Hibernate使用DBA强烈控制的模式版本。
无论索引是否由Hibernate / JPA建模,只需运行数据库脚本,即可创建索引。 (或者您可以对Hibernate / JPA生成的脚本应用文本编辑)
对于Oracle DB,默认索引类型已经是B-Tree。在MySQL的情况下,默认索引类型是B-Tree,除了内存存储引擎的情况,其中默认值是HASH - 但在索引创建脚本中指定B-Tree是微不足道的。 MySQL 5 - Create Index