Hibernate Отношение ко многим Hbm Xml Ошибка - PullRequest
0 голосов
/ 30 мая 2019

Я хочу создать связь между таблицей Definition (DEF) и Details (DET) по внешним ключам в Hibernate. В этом случае одно определение имеет несколько деталей.

  • Таблица определений имеет столбец ID как PK
  • Таблица сведений имеет столбец ID как PK и DEFINITION_ID как FK

Когда я соединяю их внутри hbm.xml , я получаю сообщение об ошибке, такое как;

ERROR

Вызывается: org.hibernate.MappingException: повторяющийся столбец в отображении для объекта: com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet столбец: идентификатор (должен отображаться с помощью вставки = «ложь», обновление = «ложь»)

ОПРЕДЕЛЕНИЕ HBM XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef"
        table="CMS_EXEMPT_RESTRICT_DEF">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DEF</param>
            </generator>
        </id>

        .
        .
        .

        <bag name="cmsExemptRestrictDetails" table="CMS_EXEMPT_RESTRICT_DET"
            inverse="true" lazy="true" fetch="select">
            <key>
                <column name="DEFINITION_ID" not-null="true" />
            </key>
            <one-to-many
                class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet" />
        </bag>
    </class>
</hibernate-mapping>

ДЕТАЛИ HBM XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet"
        table="CMS_EXEMPT_RESTRICT_DET">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DET</param>
            </generator>
        </id>

        <many-to-one name="cmsExemptRestrictDefinition" class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef" fetch="select">
            <column name="ID" not-null="true" />
        </many-to-one>

        <property name="definitionId" type="java.lang.Long">
            <column name="DEFINITION_ID" />
        </property>
    </class>
</hibernate-mapping>

Первое. Нужно ли мне определять отношение «многие к одному» и «один ко многим» в каждом hbm xmls?

Второе. Нужно ли переименовывать идентификатор столбца в деталях, например, DETAIL_ID?

Спасибо.

1 Ответ

1 голос
/ 30 мая 2019

Отображение свойства Definition_id неверно. Внешний ключ не должен отображаться. Удалите его и измените имя столбца в отображении многих значений на определение_идентификатора:

Изменить подробности hbm xml на:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDet"
        table="CMS_EXEMPT_RESTRICT_DET">
        <tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
            entity-mode="pojo" />
        <id name="oid" type="java.lang.Long">
            <column name="ID" />
            <generator class="sequence">
                <param name="sequence">SEQ_CMS_EXEMPT_RESTRICT_DET</param>
            </generator>
        </id>

        <many-to-one name="cmsExemptRestrictDefinition" class="com.ykb.hmn.cms.commission.datamodel.ICmsExemptRestrictDef" fetch="select">
            <column name="DEFINITION_ID" not-null="true" />
        </many-to-one>

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