代码之家  ›  专栏  ›  技术社区  ›  Dan

是否可以使用hibernate注释和hbm2ddl在联接表上创建索引?

  •  2
  • Dan  · 技术社区  · 14 年前

    我在许多对多的联合中有两个实体。如果已激活hbm2ddl,则Hibernate将为此关联创建联接表。但是,由于我没有此表的实体,因此无法应用@index注释。是否有方法告诉Hibernate HBM2DDL在联接表上生成索引和主键?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Matt Solnit    14 年前

    一种选择是使用 auxiliary database objects 但是它需要您从JPA注释切换到传统的 .hbm.xml 文件。

    下面是一个例子:

    <!-- class mapping: -->
    <class name="Entity1" table="Entity1">
    
      <!-- insert other mappings here -->
    
      <!-- this class's half of the many-to-many relationship: -->
      <set name="Entity2s" table="TheJoinTable">
        <key column="Entity1ID" />
        <many-to-many class="Entity2" column="Entity2ID" />
      </set>
    </class>
    
    <!-- auxiliary object: -->
    <database-object>
      <create>CREATE INDEX MyIndex ON TheJoinTable(Entity1ID)</create>
    </database-object>
    

    另一种选择是轻而易举地创建一个完整的实体来替换联接表。这实际上是我在类似情况下所做的。

    希望这有帮助。

        2
  •  0
  •   T Efron    7 年前

    可以对集合表批注应用索引。例如。:

        @javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
    @javax.persistence.CollectionTable(
            name = "TheJoinTable",
            indexes = {
                @Index(name = "MyIndex", columnList = "Entity1ID")},
             joinColumns = {
                @JoinColumn(name = "TheJoinColumn")}
    )