News news1=new News("DD", "dd");
session.persist(news1);
flush()方法
//flush()方法:使数据库中的记录和Session中的记录保持一致,为了保持一致可能会发送对应的sql语句
//Transaction.comit()方法中 会先执行Session.flush(),再提交事务
//**注意: 在未提交事务或者未使用flush()方法时,也有可能会进行flush()方法
//1)执行HQL或者QBC查询时,会先进行flush()方法。
save()方法
//save()方法使一个临时对象转换为持久化对象,执行insert操作
//为对象分配ID
//在flush缓存时发出一天insert语句
//持久化对象的id不可修改.使用映射文件指定的方法生成ID;
Persit() 同save()方法,执行insert操作
当id不为零时,save会以一个新的id保存到数据库,persit()则会抛出异常
<span style="font-size:18px;"> News news=new news(1,"title","test");
session.save(news);</span>
get() load()
Get和Load方法 持久化对象转为临时对象(就是从数据库中获得对象)
执行Get方法会立即执行查询操作加载对象
Load方法不会立即执行查询操作,返回一个代理对象。当使用时再进行查询。
若数据表中没有对应数据,get返回一个空的对象,load抛出异常
Load方法,在初始化代理对象之前就关闭Session
会抛出异常LazyInitialazytionException
@Test
public void testGet(){
News news=(News)session.get(News.class, 5);
System.out.println(news);
}
@Test
public void testLoad(){
News news=(News)session.load(News.class, 5);
System.out.println(news.getClass().getName());
}
update()
若更新对象在session中,不需要显示的调用update(), commit()方法会自动update;
不在session中时 处于游离状态,需要调用update()方法;
调用update时无论更新的对象是否与数据表里的一致都会执行update操作
----如何避免 在.hbm.xml.配置文件中的 class节点设置select-before-update=true
当update()方法关联一个游离对象时,如果session中已经存在一个相同ID的对象,抛出异常
public void testUpdate(){
News news=(News)session.get(News.class, 5);
news.setAuthor("123");
session.clear();
System.out.println("123");
session.update(news);
}