0

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

4

1 回答 1

3
  • 虽然 JPA 允许您对主键 (@Id) 和唯一约束 (@UniqueConstraint) 进行建模,但它不允许您对索引进行显式建模。JPA 标准中当然没有在索引范围或 btree 等处建模/提示的功能。JPA 2.0 Spec

  • Hibernate 通过@Index 支持索引建模。这是一个例子:

    @Entity
    @org.hibernate.annotations.Table(name="Forest", 索引 = { @Index(name="idx​​", columnNames = { "name", "length" } ) } )
    公共类 Forest { ... }

    或者对于单列索引:

    公共类树{

      @Index(name="story1index")
      public String getLeaf() {
         return leaf;
      }
    

    }

    它不允许您指定“范围索引”、btree 等... Hibernate Annotations 3.5

    如果hibernate 生成数据库模式,那么它将创建索引。
    但是,在任何应用了合理 QA 的环境中,DB 模式通常由 DBA 单独创建和维护,而不是通过 hibernate 自动模式生成。这是更好的做法,因为它允许 DBA 完全根据需要定义所有物理属性 - 就像您在 Q 中要求的物理属性类型一样;-)。然后 Hibernate 使用 DBA 的强控制版本的模式。

  • 无论索引是否由 Hibernate/JPA 建模,只需运行 DB 脚本,即可创建索引。(或者您可以将文本编辑应用到 Hibernate/JPA 生成的脚本)

  • 对于 Oracle DB,默认索引类型已经是 B-Tree。在 MySQL 的情况下,默认索引类型是 B-Tree,但在内存存储引擎的情况下,默认是 HASH - 但在索引创建脚本中指定 B-Tree 很简单。MySQL 5 - 创建索引

于 2012-11-05T07:47:07.410 回答