смешиваниеи <subclass> - PullRequest
1 голос
/ 30 июня 2011

Я фактически добавляю функциональность в продукт (интенсивное использование 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>

, когда я пытаюсь сохранить экземпляр сегментации, у меня есть такое исключение (с использованием H2 иUDBUnit)

Причина: org.h2.jdbc.JdbcSQLException: NULL не допускается для столбца "ID_ELEMENT_NIVEAU_UN";Оператор SQL: вставьте в ENU_ELEMENT_NIVEAU_UN (OID) значения (?) [23502-154]

, и сгенерированный SQL для вставки сегментации выглядит следующим образом

insert into ENU_ELEMENT_NIVEAU_UN (OID) values (?)

Кажетсячто он рассматривал Segmentation как ElementNiveauUn, но из-за ENU_ELEMENT_NIVEAU_UN равен not-null="true" в отображении ElementNiveauUn, он ожидает установить значение, которое я уже сделал, но кажется, что оно потеряно в процессе вставки

Вот упрощенная диаграмма классов UML : http://goo.gl/vOHHC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...