将类映射到现有对象列表时的“映射中的重复列”

时间:2017-06-20 19:24:58

标签: java sql hibernate hibernate-mapping hibernate-entitymanager

我正在向对象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不会延伸QueryResource,因此它不会被映射两次。对于多个一对多关系,表格不能是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 个答案:

答案 0 :(得分:0)

我必须在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>