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就不会报错
例子:
@Test
public 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()
@Test
public 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);
}
}