我实际上在产品中添加了一个功能(Hibernate& 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