持久化状态与hibernate语句执行顺序
来源:互联网 发布:在国外如何淘宝买东西 编辑:程序博客网 时间:2024/06/05 08:59
1.对象的状态和save与saveOrUpdate
- 瞬间对象的save与saveOrUpdate
public void testDuixiang(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();try {User user = new User();user.setId(3);user.setUserName("shaxuan");user.setPassword("abc");user.setTrueName("杨紫萱");session.save(user);//如果是瞬间对象,对象有木有id都会save//如果瞬间对象有id,根据id 直接update数据库;//如果瞬间对象无id,save对象到数据库session.saveOrUpdate(user); tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}
2.持久化对象的save与saveOrUpdate
User user = (User)session.get(User.class, 3);user.setPassword("sunhuimingzxc");//session.save(user);//持久化对象save方法不会重新保存一个新对象,会执行update操作,saveOrUpdate同理//同理session.saveOrUpdate(user);
2.save与persist,update与merge
1.save与persist:基本相同,使用时没有区别;
2.update与merge://当内存中有两个id相同的对象时,update瞬时对象报错,用merge就不会报错
例子:
@Testpublic void testPersistAndMerge(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();//瞬时对象User user1 = new User();user1.setId(4);user1.setUserName("zhaozhao");user1.setPassword("zhaozhao");user1.setTrueName("zhaozhao");try {User user2 = (User)session.get(User.class, 4);//session.update(user1); //当内存中有两个id相同的对象时,update瞬时对象报错session.merge(user1);//用merge就不会报错tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}
3.insert,update,delete的执行顺序
当代码中执行到save或update等语句的时候不会立即变更,会在提交事务的时候向数据库发送sql执行变更,变更顺序为:insert update delete,与代码顺序无关
如果要按照代码顺序执行的话,使用session.flush()
@Testpublic void testOrder(){Session session = HibernateUtil.getSession();// 创建及开启事务对象*/Transaction tran = session.beginTransaction();//瞬时对象User user1 = new User();user1.setUserName("zhaozhao");user1.setPassword("zhaozhao");user1.setTrueName("zhaozhao");try {//hibernate会将要变更的内容放到缓存中,形成队列,当提交事务后,执行语句的顺序为:insert update delelte,与代码顺序无关,若要按照代码顺序执行,//使用Session.flush()刷新,将需要先执行的代码先执行。session.delete(session.get(User.class, 4));//Session.flush();User user = (User)session.get(User.class, 8);user.setPassword("llllllll");session.update(user);//Session.flush();session.save(user1);tran.commit();} catch (HibernateException e) {tran.rollback();e.printStackTrace();}finally{HibernateUtil.closeSession(session);}}
- 持久化状态与hibernate语句执行顺序
- Hibernate 持久化状态
- hibernate 持久化状态
- hibernate持久化状态
- Hibernate 持久化状态、HQL语句大全(转)
- hibernate持久化对象状态
- Hibernate的持久化状态
- hibernate持久化对象状态 .
- hibernate持久化对象状态
- Hibernate持久化对象状态
- Hibernate持久化对象状态
- Hibernate之持久化状态
- hibernate持久化对象状态
- 1 Hibernate持久化状态
- hibernate持久化对象状态
- hibernate持久化对象状态
- Hibernate的持久化状态
- hibernate持久化对象状态
- 自定义语言的实现——解释器模式(五)
- ccnu-线段树-简单的区间更新(三题)
- 记牌器教程 hook socket教程 c++
- jsp Servlet基础入门学习:设置HTTP应答头
- Awk - 教程
- 持久化状态与hibernate语句执行顺序
- Android常用功能汇总
- 基于VC++开发InlineHook网络数据发送接收函数
- python 文件操作(转载)
- 林仕鼎:架构师成长之路----如何突破瓶颈
- Error: no such instruction: `ldr r0,=0x53000000'
- 最牛B的编码套路
- oracle中Job定期执行存储过程刷新物化视图并记录异常(我的物化视图不能自己刷)
- 激励-弱校acm的奋斗史