Hibernate 混合和

Hibernate 混合和,hibernate,mapping,Hibernate,Mapping,实际上,我在Hibernate&Spring密集型使用产品中添加了一项功能,我必须修改实际的Hibernate映射,具体如下: 母实体抽象类,称为AbstractElement 在此之前,一切都运行良好,java类没有什么特别之处,我的问题是: 我必须添加一个扩展ElementNiveauUn的非抽象类,以便从中继承,从而从AbstractElement继承 映射的片段如下所示: <subclass name="fr.g.n.a.domain.parametrage.Critere"

实际上,我在Hibernate&Spring密集型使用产品中添加了一项功能,我必须修改实际的Hibernate映射,具体如下:

母实体抽象类,称为AbstractElement

在此之前,一切都运行良好,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>
它似乎将分段视为一个ElementNiveauUn,但由于ElementNiveauUn映射中的ENU_ELEMENT_niveauu_UN不是null=true,它希望设置我已经设置的值,但在插入过程中它似乎丢失了


这里是一个简化的UML类图:

看来,对连接的子类进行子类化并不能保持继承性,我试图修改映射,以便将连接的子类作为一个属性包含在新概念中,并通过将新类视为一个包装器将调用重定向到封闭的实体。我最终提出了这个问题,我将ElementNiveauUn封装为AbstractElement的一个连接子类,在hibernate下映射为class的新Critere类中,然后管理ElementNiveauUn throw Critere的specefic属性调用,主要是-组合而非专门化-
 <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" />
  <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>
insert into ENU_ELEMENT_NIVEAU_UN (OID) values (?)