Hibernate saveOrUpdate方法到底是怎么执行的?
2015-01-19 14:21
344 查看
saveOrUpdate方法,如果传入的对象有主键就执行更新,没有就执行新增。这句话误导了很多人。
究竟是执行新增还是更新,是要有上下文环境的。这个环境就是主键策略的选择。
主键生成方式为 手动设置:assigned:
设置了主键的值:
执行select * from table_name where id = ?
若可以查到数据,则执行update操作,
如果查不到数据,则执行save操作。
没有设置主键的值:
hibernate报错,意思是没有指示主键是多少,hibernate不知道怎么往数据库插入。
主键生成方式为 自动生成:identity:
如果该对象设置了主键的值:
执行update操作,
若数据库表中有匹配该id的数据,修改成功。
若数据库表中没有匹配该id的数据,hibernate报错。
如果该对象不存在标识属性:
执行save 操作,自动生成主键,插入该数据进入数据库。
究竟是执行新增还是更新,是要有上下文环境的。这个环境就是主键策略的选择。
主键生成方式为 手动设置:assigned:
设置了主键的值:
执行select * from table_name where id = ?
若可以查到数据,则执行update操作,
如果查不到数据,则执行save操作。
没有设置主键的值:
hibernate报错,意思是没有指示主键是多少,hibernate不知道怎么往数据库插入。
主键生成方式为 自动生成:identity:
如果该对象设置了主键的值:
执行update操作,
若数据库表中有匹配该id的数据,修改成功。
若数据库表中没有匹配该id的数据,hibernate报错。
如果该对象不存在标识属性:
执行save 操作,自动生成主键,插入该数据进入数据库。
相关文章推荐
- Hibernate的SaveOrUpdate方法带来的困扰
- hibernate中各种保存方法的区别 save persist update saveOrUpdate merge lock
- Hibernate 的saveOrUpdate方法
- 【hibernate框架】核心开发接口-saveOrUpdate方法与delete方法
- hibernate saveOrUpdate方法和merge的区别
- Hibernate 的saveOrUpdate方法
- Hibernate merge、update与saveOrUpdate方法的区别
- hibernate的save和saveOrUpdate方法
- Hibernate merge、update与saveOrUpdate方法的区别
- 如何查看,当运行一个hibernate 方法后到底执行了哪些SQL语句
- 框架学习之Hibernate 第四节 实体对象的三种状态和saveOrUpdate方法
- hibernatetemplate 的update和saveOrupdate方法不能用的问题
- 整合SSH中getHibernateTemplate()中的update()和saveOrUpdate()方法没反应
- 在hibernate中save() saveOrUpdate() update() meger方法的讲解
- 05_传智播客hibernate教程_实体对象的三种状态与saveOrUpdate方法 2 关于delete后的状态
- hibernate中各种保存方法的区别 save persist update saveOrUpdate merge lock
- hibernate的save(),saveOrUpdate(),update(),merge()方法的使用
- hibernate merge和saveOrUpdate方法
- getHibernateTemplate().update()方法执行后需flush,否则无法更新
- 使用saveOrUpdate方法时,若hibernate的session存在了两个具有相同id的不同实体,则会报错