1.瞬时对象(TransentObjects):由我们自己创建出来,数据库中没有相应的记录,也没有被hibernate的Session管理起来。这样的队对象可以被jvm回收的。
2.持久化对象(persistentObjects):这个对象在数据库中有相应的记录,这个对象被Session管理起来。
3.托管对象(detachObjects):数据库中有相应的记录,但是没有被Session管理。
- 瞬时对象转换成持久对象
@Test
public void test2() {
Session session = HibernateUtils.getSssion();
Transaction transaction = session.beginTransaction();
// 创建对象,这是是瞬时对象
try {
User user = new User();
user.setUname("张三");
user.setGender("男");
user.setBirthday(new Date());
// 发出sql语句,把user对象纳入到Session的管理,并且保存到数据库,持久状态
session.save(user);
// 设置持久对象属性,Session会把修改后的持久对象的属性值和之前
// 没有修改时的做对比,如果有变化就发出update,如果没有就不发
user.setUname("风格");
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
- 持久对象转换托管对象
@Test
public void test4() {
Session session = HibernateUtils.getSssion();
Transaction transaction = session.beginTransaction();
// 创建对象,这是是瞬时对象
User user = new User();
try {
user.setUname("张三");
user.setGender("男");
user.setBirthday(new Date());
session.save(user);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
// session关闭,那么user由持久对象变成了托管对象
HibernateUtils.closeSession(session);
}
Session session1 = HibernateUtils.getSssion();
Transaction transaction1 = session.beginTransaction();
try {
user.setUname("尔尔");
// session1接纳了user,立即把user变成持久对象
session1.update(user);
transaction1.commit();
} catch (Exception e) {
e.printStackTrace();
transaction1.rollback();
} finally {
HibernateUtils.closeSession(session1);
}
}
- 通过get和load和iterator查询出来的对象是持久状态
@Test
public void test5() {
Session session = HibernateUtils.getSssion();
Transaction tx = session.beginTransaction();
try {
// 通过get方法查询的对象即在Session管理中,也在数据库中也有记录,所以user是持久对象
// User user = (User) session.get(User.class, 2);
User user = (User) session.load(User.class, 2);
System.out.println(user);
user.setUname("xxx");
// 发出update语句,证明是持久对象
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}
- 持久和托管转换瞬时
通过delete把数据库中的数据删除,而且清空Session中的对象,那么这个对象就编程了瞬时对象
@Test
public void test6() {
Session session = HibernateUtils.getSssion();
Transaction tx = session.beginTransaction();
try {
// 通过get方法查询的对象即在Session管理中,也在数据库中也有记录,所以user是持久对象
User user = (User) session.get(User.class, 2);
System.out.println(user);
// session的删除会把数据库中的记录删掉,同时清空Session的user对象
session.delete(user);
// 发出update语句,证明是持久对象
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
HibernateUtils.closeSession(session);
}
}