'Repeated column in mapping' 将 class 映射到现有对象列表时

'Repeated column in mapping' when mapping a class to an existing list of objects

我正在将 ResourcePermission 添加到对象 Report。每个 Query 对象都可以具有一对一的关系。 Query 扩展 Resource 并在一对多(一个查询到多个权限)中具有 ResourcePermission

我需要将相同的 属性 添加到与 Query 关联的 Report 对象,因为它可以有不同的权限。当我添加列表并将一个 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 没有扩展 QueryResource,因此它没有被映射两次。 table 可以不是多个一对多关系的 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>

我必须在 Report 映射上设置 inverse="true",因为 ReportPermission 将负责关系。

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