【问题标题】:Collections are not allowed in sub classes in Table per subclass using a discriminator不允许使用鉴别器在每个子类的表中的子类中进行集合
【发布时间】:2017-06-13 16:26:59
【问题描述】:

我正在使用继承策略:Table Per subclass strategy using discriminator.

我的 POJO 类如下

public abstract Class A{
...
}

public Class B extends A{
private List <D> collection
......
}

public Class C extends A{
..........
}

public class D{
.........
}

Hibernate 映射如下

 <hibernate-mapping>

 <class name="A" entity-name="A"
    abstract="true"  discriminator-value="ABS_A"
    table="A">
     <id name="id" type="java.lang.String">
        <column not-null="true" unique="false" name="`ID`" />
      </id>
      <discriminator type="string">
        <column name="`ABS_A_DISCRIMINATOR`" index="A_discriminator"
            length="255" not-null="true" />
       </discriminator>
             ........................
      </class>

       <subclass extends="A" entity-name="B"
          name="B"
          discriminator-value="B">

        <join table="B" fetch="select">
         <key><column name="ID" /></key>
          <list name="collection" table="B_D" cascade="all" lazy="true">
        <key column="ID" />
        <list-index column="idx" />
           <many-to-many entity-name="D" unique="false">
             </many-to-many>
                </list>
           ....................
         </join>
       </subclass>

       <subclass extends="A" entity-name="C"
          name="C"
          discriminator-value="C">

        <join table="C" fetch="select">
         <key><column name="ID" /></key>
         ................
         </join>
       </subclass>

    <class name="D" entity-name="D" table="D">
    .....................
     </class>
<hibernate-mapping>

我收到以下异常 元素类型“join”的内容必须匹配“(subselect?,comment?,key,(property|many-to-one|component|dynamic-component|any)*,sql-insert?,sql-update?,sql -删除?)”。

如果加入标签不允许list/set/idbag/bag,有没有其他方法可以实现这一点。我遇到这个问题是因为当我在没有鉴别器策略的情况下使用每个子类的表时发生了不必要的连接。

注意:严格来说,我想要标准化的数据库模型。

提前致谢!...

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    我们可以像下面这样在子类标签下添加列表

    <subclass extends="A" entity-name="B"
              name="B"
              discriminator-value="B">
    
      <list name="collection" table="B_D" cascade="all" lazy="true">
            <key column="ID" />
            <list-index column="idx" />
             many-to-many entity-name="D" unique="false">
               </many-to-many>
      </list>
    
     ...............
    </subclass>
    

    加入标签确实允许在里面列出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多