分享

Hibernate中update()和merge()的区别

 为什么图书馆13 2016-06-27
初学hibernate时,对于session中的update()和merge()两个方法,很容易搞混,觉得两种都能用,有时候,又觉得不知道该用哪一种。
实际上,这两个方法,是有很大区别的
首先,对于一个处于detatch状态的实体对象来说,要将其中的修改,合并到数据库中,有两种方法,一种方式,是调用update(),另一种方式是调用merge()
当调用update()时,首先要取保目标session中,不包含同样id的实体对象的引用,如果有的话,会抛出异常,完成update()方法后,这个实体对象从detatch状态,转换为persistent状态,在session提交前,后续对其的修改,都会被合并到数据库中。
当调用merge()对象时,无需考虑session中是否已经包含同样id的实体对象,如果session中没有同样id的实体对象,hibernate会通过select语句,从数据库中查询出对应对象,如果数据库中没有对应对象,就新建一个。同时,完成merge()操作后,会返回数据库中对应的persistent状态对象,而原有的,作为参数传入的实体对象,仍然是detatch状态,后续代码对其的修改,无法合并到数据库中。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多