"Повторяющийся столбец в отображении" при отображении класса в существующий список объектов

Я добавляю ResourcePermission к объекту Report, каждый Query объект может иметь отношение один к одному. Query продолжается Resource и имеет ResourcePermissionв один-ко-многим (один запрос ко многим разрешениям).

Мне нужно добавить то же свойство в Report объект, связанный с Query потому что он может иметь разные разрешения. Когда я добавляю список и карту один Query слишком много Permission отношения, которые я получаю

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.bio.ResourcePermission column: resource_id (should be mapped with insert="false" update="false")

Что я не понимаю, почему, Report не распространяется Query или же Resource и, следовательно, он не отображается дважды. Может ли стол просто не быть many для нескольких отношений один ко многим?

<class name="com.bio.Report" table="REPORT">
    <id name="id" type="long" column="id">
        <generator class="foreign">
            <param name="property">query</param>
        </generator>
    </id>
    <property name="name" column="name"/>

    <!--Trying to add this list mapping breaks it-->
    <bag name="permissions" table="RESOURCE_PERMISSION">
        <key column="resource_id" not-null="true"/>
        <one-to-many class="com.bio.ResourcePermission"/>
    </bag>

    <!-- This query extends Resource-->
    <one-to-one name="query" class="com.bio.Query" />
</class>

Это оригинальный элемент, который имел ResourcePermissions

    <class name="com.bio.Resource" table="RESOURCE">
    <id name="id" type="long" column="id">
        <generator class="native">
            <param name="sequence">SEQ_RESOURCE_AUTO</param>
        </generator>
    </id>

    <bag name="permissions" table="RESOURCE_PERMISSION" lazy="true" batch-size="50" cascade="all-delete-orphan">
        <key column="resource_id" not-null="true"/>
        <one-to-many class="com.bio.ResourcePermission"/>
    </bag>
</class>

Отображение разрешений

    <class name="com.bio.ResourcePermission" table="RESOURCE_PERMISSION">
    <id name="id" type="long" column="id">
        <generator class="native">
            <param name="sequence">SEQ_RES_PERM_AUTO</param>
        </generator>
    </id>

    <property name="canEdit" column="edit"/>
    <property name="canView" column="can_view"/>
    <property name="canRun" column="run"/>
    <property name="everyone" column="everyone"/>
</class>

1 ответ

Решение

Я должен был установить inverse="true" на Report картографирование с ReportPermission будет нести ответственность за отношения.

<bag name="permissions" table="RESOURCE_PERMISSION" inverse="true"> <key column="resource_id" not-null="true"/> <one-to-many class="com.bio.ResourcePermission"/> </bag>

Другие вопросы по тегам