使用鉴别器在每个子类的表中的子类中不允许收集

时间:2017-06-13 16:27:00

标签: hibernate

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

我的POJO课程如下

 <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>

Hibernate Mapping如下所示

plugman create --name twinpush --plugin_id twinpush-plugin --plugin_version 1.0 --path twinpush-plugin
cd twinpush-plugin/twinpush
plugman platform add --platform_name ios
plugman platform add --platform_name android
plugman createpackagejson .

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

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

注意:严格来说我想要规范化的数据库模型。

提前致谢!...

1 个答案:

答案 0 :(得分:0)

我们可以在子类标签下添加列表,如下所示

<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>

join tag允许列表里面。