zoukankan      html  css  js  c++  java
  • Hibernate中的merge方法

    Hibernate中有一个常见的错误:

      A different object with the same identifier value was already associated with the session

    在一个session中存在两个不同的实体却有着相同的身份标签(主键)是会报错的,想要避免这种错误可以使用Hibernate中的merge方法。

    merge方法的作用:

    1. new一个对象并设置ID时,这个对象会被当作游离态处理,在使用merge时,如果在数据库中不能能找到这条记录,则使用insert将数据插入;如果在数据库中找到这条记录,则使用update将数据更新。
    2. new一个对象没有设置ID时,这个对象会被当作瞬态处理,在使用merge时会根据实体类的主键生成策略保存这条数据。
    3. 使用merge存储到数据库的对象,其本身不会转变为持久态对象。

    HIbernate中对象的三态的补充:

    • 瞬态:通过Java关键字new的实体类对象,不和Session实例关联并且在数据库中没有和瞬态对象关联的记录,此时的对象还没有纳入Hibernate的缓存管理中。
    • 持久态: 已经被保存进数据库的实体对象,还存于Hibernate的缓存管理之中。
    • 游离态(脱管态):持久态对象脱离了Hibernate的缓存管理后就会变成游离态,游离态对象与瞬态对象的最大区别在于,游离态对象在数据库中可能存在一条与之对应的记录,而瞬态对象则不会在数据库中存在与之对应的记录,简而言之就是游离态对象比瞬态对象多了一个ID属性。
  • 相关阅读:
    win8应用商店安装路径
    GridView用存储过程实现分页
    Struts学习笔记之HTML标签库
    一个大学毕业生的反思
    JUnit in Action关于Controller的简明阐述
    Struts学习笔记之BEAN标签库
    Struts中web.xml和strutsconfig.xml配置详解
    Os学习笔记之处理机调度
    log4j.properties配置详解
    JUnit学习笔记之简介
  • 原文地址:https://www.cnblogs.com/RoddeHope/p/7439735.html
Copyright © 2011-2022 走看看