2

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

4

2 回答 2

1

一种选择是使用辅助数据库对象,但这需要您从 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>

另一种选择是硬着头皮创建一个成熟的实体来替换连接表。这实际上是我在类似情况下所做的。

希望这可以帮助。

于 2010-02-10T21:33:06.750 回答
0

您可以在集合表注释上应用索引。例如:

    @javax.persistence.ElementCollection(fetch = javax.persistence.FetchType.LAZY)
@javax.persistence.CollectionTable(
        name = "TheJoinTable",
        indexes = {
            @Index(name = "MyIndex", columnList = "Entity1ID")},
         joinColumns = {
            @JoinColumn(name = "TheJoinColumn")}
)
于 2017-07-14T19:06:44.037 回答