【问题标题】:Is it possible to create indices on join table using Hibernate annotations and hbm2ddl?是否可以使用 Hibernate 注释和 hbm2ddl 在连接表上创建索引?
【发布时间】:2011-01-14 21:26:16
【问题描述】:

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

【问题讨论】:

    标签: hibernate join hibernate-annotations hbm2ddl


    【解决方案1】:

    一种选择是使用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】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-09
        • 2023-03-20
        • 2011-08-05
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        相关资源
        最近更新 更多