混合<joined-subclass>和<subclass> </subclass> </joined-subclass>

时间:2011-06-30 15:08:19

标签: hibernate mapping

我实际上在产品中添加了一个功能(Hibernate&amp; Spring密集型使用),我必须修改实际的Hibernate映射,这是交易:

"Mother"实体(摘要)类,并调用AbstractElement

<class abstract="true" dynamic-insert="true" dynamic-update="true" name="fr.g.n.a.domain.instances.AbstractElement"
table="AEL_ABSTRACT_ELEMENT">
<cache usage="read-write" />
<id name="oid" type="string">
  <column length="64" name="OID" />
  <generator class="assigned" />
</id>
<discriminator column="TYPELEMENT" type="string" not-null="false" force="true" />

<!-- Version hibernate de l'objet persisté : -1 signifie que l'objet n'est pas présent en base -->
<version name="version" unsaved-value="negative">
  <column name="VERSION" />
</version>

一个子类(不是抽象的),它增强了名为"ElementNiveauUn"的概念,这里是一个映射的片段

 <joined-subclass dynamic-insert="true" dynamic-update="true" name="fr.g.n.a.domain.instances.ElementNiveauUn"
table="ENU_ELEMENT_NIVEAU_UN" abstract="true" lazy="false" extends="fr.generali.nova.atp.domain.instances.AbstractElement">
<key column="OID" not-null="true" foreign-key="FK_ENU_AEL_OID" />

直到这里,每件事情都运行良好,没什么特别提到的java类,这是我的问题:

我必须添加一个类(非抽象),它扩展ElementNiveauUn以便从中继承,所以来自"AbstractElement"

映射的片段如下所示:

  <subclass name="fr.g.n.a.domain.parametrage.Critere" extends="fr.g.n.a.domain.instances.ElementNiveauUn" >
    <subclass dynamic-insert="true" dynamic-update="true" name="fr.g.n.a.parametrage.CritereProduit" abstract="false" lazy="false"
  extends="fr.g.n.a.domain.parametrage.Critere" discriminator-value="CRITERE_PRODUIT">
    </subclass>
    <subclass dynamic-insert="true" dynamic-update="true" name="fr.g.n.a.domain.parametrage.Segmentation" abstract="false" lazy="false"
  extends="fr.g.n.a.atp.domain.parametrage.Critere" discriminator-value="SEGMENTATION">
    </subclass>
    <subclass dynamic-insert="true" dynamic-update="true" name="fr.g.n.a.domain.parametrage.CritereApporteur" abstract="false" lazy="false"
  extends="fr.g.n.a.atp.domain.parametrage.Critere" discriminator-value="CRITERE_APPORTEUR">
    </subclass>

当我尝试保存Segmentation实例时,我有这种异常(使用H2和UDBUnit)

  

引起:org.h2.jdbc.JdbcSQLException:列“ID_ELEMENT_NIVEAU_UN”不允许NULL; SQL语句:插入ENU_ELEMENT_NIVEAU_UN(OID)值(?)[23502-154]

并且生成的用于插入Segmentation的SQL看起来像这样

insert into ENU_ELEMENT_NIVEAU_UN (OID) values (?)

它似乎将Segmentation视为ElementNiveauUn,但因ENU_ELEMENT_NIVEAU_UN not-null="true" ElementNiveauUn内的{{1}}映射,它期望设置值{I}已经做了但在插入过程中似乎丢失了

以下是简化的UML类图http://goo.gl/vOHHC

0 个答案:

没有答案