有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate自参考映射难题

我正在尝试绘制一个类

Class Node {
Node parent;
List<Node> children;
}

我尝试过多对一和一对多的各种组合,但似乎没有任何效果。我本想粘贴我的映射文件,但我尝试了太多的东西,我不知道该粘贴哪一个。请帮助我:(如果我使用SET而不是LIST,我已经成功地映射了类,但是当我使用LIST时,我无法更新用于存储列表索引的列。非常感谢


共 (1) 个答案

  1. # 1 楼答案

    不能直接更新列表索引,因为它是通过检查对象在父对象的子列表中的位置而派生的。如果一个对象位于列表中的索引10处,并且list-index属性设置为5,那么Hibernate应该使用哪一个

    因此,通常您会告诉Hibernate使用哪个列来存储列表索引,然后忘记它

    但是,如果您想要将list-index属性映射到对象,以便直接访问它(以只读方式,例如getIndexInList()),那么必须将其映射到insert=false update=false

    我对XML映射有点生疏,但这里有一些我认为会有用的东西。如果您有问题,请告诉我您收到了什么错误消息

    <hibernate-mapping>
     <class name="com.example.Node" table="node">
        <id name="id" column="nodeId">
            <generator class="native"/>
        </id>
    
        <property
            name="listIndex"
            column="listIndex"
            insert="false"
            update="false" />
    
        <many-to-one
            name="parent"
            column="parentNodeId"
            class="com.example.Node"/>
    
        <list name="children" inverse="true" cascade="all">
            <key column="parentNodeId"/>
            <list-index column="listIndex"/>
            <one-to-many class="com.example.Node"/>
        </list>
    
     </class>
    </hibernate-mapping>