如何在hibernate注释中指定范围索引

时间:2012-10-29 18:21:54

标签: java hibernate indexing hibernate-annotations

是否可以通过JPA或Hibernate注释指定给定索引应使用范围能力的索引方法(例如btree)?如果是这样,怎么样?

1 个答案:

答案 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