• 关于Hibernate多对多关联关系的更新问题。


    一个账套类Reckoning和账套项目类 AccountItem。这两个类是双向多对多关联关系。

    Reckoning.hbm.xml文件的配置如下

    <set name="accountItems" table="ITEM_RECKONING"  lazy="true" >
                <key>
                    <column name="R_ID"></column>
                </key>
                <many-to-many class="com.pms.entities.base.AccountItem" column="I_ID"></many-to-many>
            </set>

    AccountItem.hbm.xml文件的配置如下:

    <set name="reckonings" table="ITEM_RECKONING" inverse="true" lazy="false">
                <key>
                    <column name="I_ID"></column>
                </key>
                <many-to-many class="com.pms.entities.treatmentManage.Reckoning" column="R_ID"></many-to-many>
            </set>

    我在执行更新操作的时候一直都报如下的错误:检查了一遍又一遍,都没有找出错误,明明知道内存中存在了两个的ID相同的Reckoning,但就是不知道什么原因导致的。
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.pms.entities.treatmentManage.Reckoning#10]
    直至目前,至于是什么原因还不太清楚。

    以下个人猜测:应该是没有使用懒加载导致的。

    因为我在进行Reckoning对象修改的操作的时候,我首先根据Reckoning的ID获取了Reckoning对象,但是我又需要获取AccountItem的集合,所以,我获取了所有的AccountItem对象。那么问题来了,因为AccountItem是不使用懒加载的。也就是说我获取了所有的AccountItem对象,那么这AccountItem对象又把它关联的Reckoning对象加载到了内存中,那么我刚才根据ID获取的Reckoning对象又被加载到内存中了,此时,又多了一个ID与我之前加载Reckoning对象相同的对象,那么我在执行更新操作的时候就报了以上错误扎到了错误的根源一切都好办。使用懒加载就解决了。

    <set name="reckonings" table="ITEM_RECKONING" inverse="true" lazy="true">//这里懒加载改为true,问题解决。
                <key>
                    <column name="I_ID"></column>
                </key>
                <many-to-many class="com.pms.entities.treatmentManage.Reckoning" column="R_ID"></many-to-many>
            </set>
  • 相关阅读:
    .netcore3.1添加swagger及JWT Authorize 验证
    Quartz.Net实现简单定时任务调度
    基于.Net Framework进行配置Swagger
    升级anaconda的python版本命令
    使用jmeter自带的html查看测试报告
    软件质量模型的6大特性和27个子特性
    PyQt5基础教程及官方文档
    使用jmeter进行下载并发测试
    selenium官方入门文档
    web driver 驱动配置位置
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/7920454.html
Copyright © 2020-2023  润新知