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

是否可以使用Hibernate注释和hbm2ddl在联接表上创建索引?,hibernate,join,hibernate-annotations,hbm2ddl,Hibernate,Join,Hibernate Annotations,Hbm2ddl,我有一个多对多关联中的两个实体。如果hbm2ddl被激活,Hibernate将为此关联创建一个联接表。但是,由于我没有此表的实体,因此无法应用@Index注释。有没有办法告诉hibernate hbm2ddl在联接表上生成索引和主键?可以使用一个选项,但它需要您从JPA注释切换到传统的.hbm.xml文件 以下是一个例子: <!-- class mapping: --> <class name="Entity1" table="Entity1"> <!-- i

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

可以使用一个选项,但它需要您从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>

在Jointable(Entity1ID)上创建索引MyIndex
另一种选择是咬紧牙关,创建一个完整的实体来替换联接表。事实上,这就是我在类似情况下所做的


希望这有帮助。

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

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