【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别

注意: 

MERGE语句是SQL语句的一种。在SQL ServerOracle数据库中可用,MySQL、PostgreSQL中不可用。

 

1》session1.merge(T entity) 合并实体的方法。

2》merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理:

                                      当ID在数据库中不能找到时,用update的话肯定会报异常,然而用merge的话,就会insert。

                                      当ID在数据库中能找到的时候,update与merge的执行效果都是更新数据,发出update语句;

                                  如果没有设置ID的话,则这个对象就当作瞬态处理:

                                  用update的话,由于没有ID,所以会报异常,merge此时则会保存数据,根据ID生产策略生成一条数据;

3》作用类似与saveOrUpdate()方法,作用基本一致,不过略有区别。

4》与saveOrUpdate()方法的区别是:

      1.saveOrUpdate()是完全更新数据

      2.merge()方法在更新数据的时候,例如数据库中本条数据的name这个字段是‘李四’,而新的要合并的数据中name字段是null,那数据库中name字段的数据是不被替换的,依旧是'李四',而其他字段被替换。

时间: 2024-07-31 12:52:38

【hibernate merge】session1.merge(T entity)方法的含义和update方法的区别的相关文章

Hibernate更新某些字段的几种update方法

Hibernate 中如果直接使用 Session.update(Object o); 会把这个表中的所有字段更新一遍. 比如: view plaincopy to clipboardprint? public class TeacherTest { @Test public void update(){ Session session = HibernateUitl.getSessionFactory().getCurrentSession(); session.beginTransactio

Android 使用Pull方法解析XML文件的方法_Android

Pull解析方法给应用程序完全的控制文档该怎么样被解析.Android中对Pull方法提供了支持的API,主要是 复制代码 代码如下: org.xmlpull.v1.XmlPullParser;org.xmlpull.v1.XmlPullParserFactory; 二个类,其中主要使用的是XmlPullParser,XmlPullParserFactory是一个工厂,用于构建XmlPullParser对象.应用程序通过调用XmlPullParser.next()等方法来产生Event,然后再处

自己动手写ASP.NET ORM框架(八):实现修改功能Update方法

前面一节中已经实现了简单的新增功能,下面来实现修改功能,代码如下1-1: #region 将实体数据修改到数据库 public int Update<T>(T entity) { TableInfo tableInfo = DbEntityUtils.GetTableInfo (entity,DbOperateType.UPDATE); string strSql = DbEntityUtils.GetUpdateSql(tableInfo); IDbDataParameter[] parms

java-hibernate框架,测试update方法时报空指针

问题描述 hibernate框架,测试update方法时报空指针 上面提示33行,33行也就一个字段一个方法,两个都找得到的 解决方案 可能是传进去的参数 或是执行的HQL语句问题,没有把数据插入. 空指针的情况很多哦! 解决方案二: user可能是空,,查一下数据库,是不是id为1的那个被删除了

hibernateTemplate.update() 方法 控制台已输出SQL语句,但数据库没有更新

问题描述 运用Spring集成Hibernate使用hibernateTemplate.update()执行修改用户操作SQL语句控制台已经输出,对象参数也正确,控制台也没有输出事务回滚但数据库数据没有更新卡了一上午了,在网上查了相关问题没有找到合适答案,所以来CSDN求教求大神解答... 解决方案 解决方案二:@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)publicvoidupdateS

class-这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗

问题描述 这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗 public void init() throws ServletException { // 获取ServletContext对象 getServletContext().setAttribute("count", 0); } 这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗 解决方案 getServletContext()返回一个对象,他后面带点,就和用哪个对象后面带点一样的道理 解决方案二: 万物皆对象,

java-Java动态绑定,对象已经向上转型了,为何优先使用的方法依然是子类的方法。

问题描述 Java动态绑定,对象已经向上转型了,为何优先使用的方法依然是子类的方法. 情况如下,我写了个测试类. son类 public class son extends father { public son() { fs=""new son""; } public void say() { System.out.println(""son say()""); } father类 public class father {

简述DbDataAdapter.Update 方法

简述DbDataAdapter.Update 方法 当应用程序调用 Update 方法时,DbDataAdapter 根据 DataSet 中配置的索引顺序为每一行检查 RowState 属性,并迭代执行所需的 INSERT.UPDATE 或 DELETE 语句.例如,由于 DataTable 中行的排序,Update 可能先执行一个 DELETE 语句,接着执行一个 INSERT 语句,然后再执行另一个 DELETE 语句. 应注意,这些语句不是作为批处理进程执行的:每一行都是单独更新的.在必

简述DbDataAdapter.Update 方法(续)

附 DbDataAdapter.Update方法的所有重载版本 n Overloads Public Function Update(ByVal dataRows() As DataRow) As Integer n Overrides Overloads Public Function Update(ByVal dataSet As DataSet) As Integer Implements IDataAdapter.Update n Overloads Public Function Up