Hibernate 的saveOrUpdate方法(转)】的更多相关文章

saveOrUpdate()方法同时包含了save()与update()方法的功能, 如果传入的参数是临时对象,就调用save()方法: 如果传入的参数是游离对象,就调用update()方法: 如果传入的参数是持久化对象,那就直接返回. 那么,saveOrUpdate()方法如何判断一个对象处于临时状态还是游离状态呢?如果满足以下情况之一,Hibernate就把它作为临时对象. Java对象的OID取值为null. Java对象具有version属性并且取值为null. 在映射文件中为元素设置了…
hibernate提供了saveOrUpdate的方法来进行数据库的操作.hibernate会根据对象的状态决定是insert还是update,其根本是通过xml文件中unsaved-value来确定的.如果设置null,系统会根据传入的对象的id的值判断,如果是null,则表示对象不存在,那么insert;如果不是Null,则表示已经存在,那么update.如果设置为none,那么表示对象不存在,会始终调用insert;如果设置为any,那么表示对象始终存在,会始终调用update 数据库表主…
save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用的时候 不会出现索引机制(即遍历目录 效率最高)update在修改时候要遍历 不存在则会异常saveorupdate是优先遍历 如果不存在则创建(效率最低)merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供…
saveOrUpdate方法,如果传入的对象有主键就执行更新,没有就执行新增.这句话误导了很多人. 究竟是执行新增还是更新,是要有上下文环境的.这个环境就是主键策略的选择. 主键生成方式为 手动设置:assigned: 设置了主键的值: 执行select * from table_name where id = ? 若可以查到数据,则执行update操作, 如果查不到数据,则执行save操作. 没有设置主键的值: hibernate报错,意思是没有指示主键是多少,hibernate不知道怎么往数…
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------…
首先,用一张图说明一个对象,在Hibernate中,在调用了不同方法之后对象所处的不同状态 在Hibernate中,一个对象的状态可以被分为如图所示的三种 Transient:瞬时对象,该对象在数据库中没有与之相对应的记录,并且该对象与Session不相关 Persistent:持久对象,该对象在数据库中有与之相对应的记录,并且该对象与Session相关 Detached:分离对象,该对象在数据库中有与之相对应的记录,并且该对象与Session不相关 三种状态中,除了持久对象之外,处于其他两种状…
Hibernate Save hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原因.假如两个实体之间有关系(例如employee表和address表有一对一关系),如果在没有事务的情况下调用这个方法保存employee这个实体,除非调用flush()这个方法,否则仅仅employee实体会被保存. Employee.java 为了方便理解,简化Employee.java的属性.…
hibernate保存  hibernate要保存的目的是提供一个方法,多.它们之间有许多不同之处,点击此处详细说明.使得差: 一.预赛: 在所有.阐释.供hibernate,,transient.persistent.detached  下边是常见的翻译办法:  transient:瞬态或者自由态  persistent:持久化状态  detached:脱管状态或者游离态  脱管状态的实例能够通过调用save().persist()或者saveOrUpdate()方法进行持久化.  持久化实例…
J2EE进阶(十六)Hibernate 中getHibernateTemplate()方法使用   spring 中获得由spring所配置的hibernate的操作对象,然后利用此对象进行,保存,修改和删除等操作,此方法是在配置了spring以后,hibernate由spring接管,不直接使用hibernate的session了.   HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加.删除.修改.查询等操作,Spring 2.0更增加对命名SQL查询的支…
Hibernate 版本:3.3.1 背景: 后端编辑一个对象,该对象(ProductDO)下,有一个另一个自定义对象(ProductLiabilityDO)的 OneToMany 关系,如下: @OneToMany(targetEntity = ProductLiabilityDO.class, mappedBy = "product", cascade = CascadeType.ALL) private List<ProductLiabilityDO> liabili…
HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate中,然后数据库操作,都必须是事务的,哪怕是查询 4 执行数据保存操作(必须提交,才会执行对应的操作方法) 5 提交事务 6 关闭Session session.close(); getCurrentSession();不需要手动关闭,opensession需要手动关闭 7 关闭SessionFact…
今天做项目,碰上这个问题: hibernate的save方法成功执行,但是未插入到数据库. Dao层代码: @Override public void save(T t) { this.getSession().save(t); } Service层的代码: @Override public void save(T t) { // TODO Auto-generated method stub dao.save(t); } 原因:未给操作添加事务. 解决方法: 给service层加上事务的注解就…
saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作. save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录. update()就是更新数据库中的记录 主键在saveorupdate()方法中是起着关键作用的,只有这个主键的值不为空的时候才进行insert还是update的判断,否则直接insert 若主键不为空,就可以进行saveorupdate()操作了. saveOrUpdate是当你一个pojo对象在不确定的情况下使用的…
merge方法和saveOrUpdate方法的区别 merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供的对象变成一个持久化对象:说的通俗一点就是:saveOrUpdate后的对象会纳入session的管理,对象的状态会跟数据库同步,再次查询该对象会直接从session中取,merge后的对 象不会纳入session的管理,再次查询该对象还是会从数据库中取. 使用merge方法修改时如果两次修改的值没有变,它只会执行select而不会进行update.…
1.配置映射关系的xml方式 我们知道,Hibernate是一个典型的ORM框架,用以解决对象和关系的不匹配.其思想就是将关系数据库中表的记录映射成为对象,以对象形式展现,这样一来,就可以把对数据库的操作转化为对对象的操作. 而ORM一般是采用xml的格式保存对象与关系数据表的映射,我们也可以从下面示例中看到hibernate中的一个映射配置表的表现形式: <?xml version="1.0" encoding="utf-8"?> <!DOCTY…
[转]Hibernate的getSQLQuery方法对char类型的解析问题 建立数据库: create table T_TEST1( id char (32), name varchar (255), other varchar (255), primary key(id) )insert into T_TEST1 values('2c9090792a18d6ab012a18d77e700001','sfasdf','asdf') insert into T_TEST1 values('2c9…
一.项目结构 二.hibernate核心配置文件:   hibernate.cfg.xm <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hiber…
转自:https://blog.csdn.net/KAIXINLUOYE/article/details/72821014 单主键生成策略由native改成assigned后,问题解决.…
以下情况java对象进入持久化状态: session.save()方法把临时对象转变为持久化对象. session.load()和session.get()方法得到的对象总是处于持久化状态. session.update(),saveOrUpdate()和lock()方法使游离对象转变为持久化状态. Query接口的list()方法返回的list集合中存放的都是持久化对象. 一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时,会把这个临时对象也转变为持久化对象.…
package com.dao.impl; import java.lang.reflect.ParameterizedType; import java.util.Collection; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.fact…
工程结构 问题描述 在工程中通过spring aop的方式配置事务,使用hibernate做持久化.在代码实现中使用hibernate persit()方法插入数据到数据库,使用hibernate update()方法更新数据.问题是执行这两个方法没有报错,但是也没有插入数据或者更新数据. 原因 hibernate persist()以及update()方法只有事务执行flush()或者commit()方法,才将数据写入数据库.详细内容可以阅读博客:http://www.cnblogs.com/…
this.getSession().merge(obj); this.getSession().saveOrUpdate(obj); saveOrUpdate(): saveOrUpdate()基本上就是合成了save()和update() 1.如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 2.如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 or…
今天同事遇到一个问题,一起研究,最后解决,让我对spring的事务管理又加深了印象. 先简单说一下项目:项目是Spring和Hibernate集成的JavaEE项目,MVC架构. 外包在service层一个以get开头的方法中写了一些业务逻辑,分别调用了dao层的save和get方法,但是发现get的数据正常显示,数据表中该save的并没有存入数据表,查hibernate生成的sql也只查到了get的语句,没有发现save的语句,也没有报任何错误.很奇怪的现象,不怕报错,就怕它不报错~ 遂检查了…
1.StudentPK类,存放Student的联合主键,必须实现java.io.Serializable接口(为了序列化扩充移植),必须重写equals跟hashCode方法(为了确保唯一性) public class StudentPK implements java.io.Serializable{ private int id; private String name; public int getId() { return id; } public void setId(int id)…
之所以要写这个,是因为最近碰到了一个延迟加载的 load() 导致出现 noSession 的异常. 下面第三种方式解决这个问题需要用到一个本地线程的对象,也就是 ThreadLocal 类,之前写过关于这个对象,可以看这个博客[本地线程 ThreadLocal 类] 提一嘴 get 和 load 的区别:[详细可以查看这篇博客 load() 和 get() 的区别] 1.get() 采用立即加载方式,而 load() 采用延迟加载;2.get() 方法执行的时候,会立即向数据库发出查询语句,而…
一.gradle中包: compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.12.Final' compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40' 二.项目中导入hibernate 1.向gradle配置文件中引入一中的两个包 2.点击按钮,在facets中添加hibernate, 这时,右下角会出现一个持久化选项卡,…
数据访问失败 出错代码: cardy.add(Restrictions.isNotEmpty("grade.cardtype.cardtype")); try...catch之后发现报了一个更细节的错:  does not reference a collection 原因:  isNotEmpty( )需要对象的属性是集合,而cardtype只是一个对象引用 解决:  用isNotNull( ) 方法 控制台打印sql时也多了一个条件: this_.CARDTYPE is not n…
因为JBoss使用的是log4j,JBoss的系统日志级别默认是INFO.而Hibernate或IBatis要打印SQL,级别为DEBUG,所以,程序设置了log4j级别为DEBUG会被JBoss系统设置的INFO给覆盖了. 要解决这个问题,需要手动的配置JBoss的Log4j日志级别: 1.打开文件:jboss-as-7.1.1.Final\standalone\configuration\standalone.xml 2.找到这个节点: <subsystem xmlns="urn:jb…
问题描述 在 MyEcplise 上运行 tomcat,利用 po 模板自动生成 po 文件,调用 po 的 save 方法,不报错,但是无法把数据插入数据库 applicationContext.xml 中文件配置 <bean id="SysConfigDAO" class="com.po.SysConfigDAO"></bean> po 中 dao 文件的引用 public class UserDAO extends BaseHibern…