一、对象的状态:
1、 临时状态(新建状态):没有保存到数据库之前的状态。
2、持久化状态(托管状态):数据库中有,也在Session缓存中。
3、游离状态(脱管状态):数据库中有,不再Session缓存中。
4、删除状态:数据库中没有,Session缓存中没有。
二、对象状态转换:
三、状态转换时的方法解释:
/**
*
* @Title: state
* @Description: 测试状态的方法
* @return void
*/
@Test
public void state01() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// 临时状态:new语句
Userinfo userinfo = new Userinfo();
// userinfo.setId("1");
userinfo.setName("zs");
// 1、临时状态——>持久化状态
// save方法,设置对象的ID,不会出错
// persist方法,设置对象的ID,则报错
session.save(userinfo);
transaction.commit();
// 2、持久化状态——>游离状态
// close方法,使对象处于关闭状态
// evict方法,将对象从Session中移除
// clear方法,将Session重置,对象清空
session.evict(userinfo);
}
/**
*
* @Title: state02
* @Description:测试对象的方法
* @return void
*/
@Test
public void state02() {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
// 3、无——>持久化状态
// get方法:
// 1、及时加载:立刻调用sql语句
// 2、若数据库中没有相对应的记录,则返回null
// 3、Session关闭后,也可以使用对象
Userinfo uGet = session.get(Userinfo.class, "12fef481-b19c-11e8-a7ca-80fa5b5015f0");
System.out.println("get:" + uGet);
// load方法:
// 1、延迟加载:不会调用sql语句,用的时候则调用sql语句
// 2、若数据库中没有相对应的记录,则报错
// 3、Session关闭后,会出现懒加载的问题
// 解决load方法懒加载问题:在映射文件中加上属性:lazy="false"
Userinfo uLoad = session.load(Userinfo.class, "202c6968-b19a-11e8-a7ca-80fa5b5015f0");
System.out.println("load:" + uLoad);
// 2、持久化状态——>游离状态
session.clear();
//5、游离状态——>删除状态
//session.delete(uLoad);
//transaction.commit();
// 4、游离状态——>持久化状态
// 游离->持久化必要条件:session不能够关闭
// update方法:
// 如果要更新一个持久化状态的对象,则可以不调用update的方法
// 如果要更新一个游离状态的对象,则需要调用update的方法
// saveOrUpdate方法:
// 如果数据库中没有记录则添加,如果指定了ID,则修改记录
uLoad.setName("ls");
// session.update(uLoad);
session.saveOrUpdate(uLoad);
//6、持久化状态——>删除状态
session.delete(uLoad);
transaction.commit();
}