持久化状态的对象:
1、hibernate的对象的状态分为三种:
(1)、临时状态的对象
利用new关键字创建出来一个对象
(2)、持久化状态的对象
session.get(),session.save(),session.update()
(3)、脱管状态的对象
session.clear():从session中清理所有的对象
1、hibernate的对象的状态分为三种:
(1)、临时状态的对象
利用new关键字创建出来一个对象
(2)、持久化状态的对象
session.get(),session.save(),session.update()
(3)、脱管状态的对象
session.clear():从session中清理所有的对象
session.evict(obj):从session中清除单个对象
session.close()
2、只有处于持久化状态的对象,该对象才能跟session交互
3、当执行事务提交的时候,hibernate内部会检查session中所有的持久化对象,发出相应的SQL语句
4、一个脱管状态的对象,如果在事务提交的时候,要想发出update语句或者insert语句,必须把脱管状态变成持久化状态
5、一个对象的持久化状态是针对某一个session的
2、只有处于持久化状态的对象,该对象才能跟session交互
3、当执行事务提交的时候,hibernate内部会检查session中所有的持久化对象,发出相应的SQL语句
4、一个脱管状态的对象,如果在事务提交的时候,要想发出update语句或者insert语句,必须把脱管状态变成持久化状态
5、一个对象的持久化状态是针对某一个session的
示例代码:
@Test
public
void savePerson(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person =
new Person();//临时状态
person.setPname(
"云三班长" );//临时状态
person.setPsex(
"不详");//临时状态
session.save(person);
//变成持久化状态
transaction.commit();
session.close();
//脱管状态
}
@Test
public
void testUpdatePerson(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person) session.get(Person.
class
,1L);//person已经是持久化状态
person.setPname(
"aaaa");
session.update(person);
//session.update方法作用:把一个对象变成持久化状态,但是这里用不着
transaction.commit();
session.close();
}
@Test
public
void testClear(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person) session.get(Person.
class
,1L);//person已经是持久化状态
person.setPname(
"asfd");//持久化状态
session.clear();
//把session中所有的对象全部清空 脱管状态
session.update(person);
//持久化状态,不加的话,无法Update
transaction.commit();
session.close();
}
@Test
public
void testEivct(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person) session.get(Person.
class
,1L);//person已经是持久化状态
person.setPname(
"1111");//持久化状态
session.evict(person);
//把person对象从session中清空 person是一个脱管状态的对象
session.update(person);
//持久化状态
transaction.commit();
session.close();
}
/*
* 当执行transaction.commit的时候,
* hibernate会检查session中所有的持久化状态的对象
* 如果该对象的id值在数据库中没有对应的记录,执行insert操作
* 如果该对象的ID值在数据库中有对应的记录,和快照区的副本进行对比,如果一样,则什么都不做,如果不一样,则执行update操作
*/
@Test
public
void testSaveUpdate(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person =
new Person();//临时
person.setPname(
"云三班长小米" );//临时
person.setPsex(
"手机不错" );//临时
Person person2 = (Person)session.get(Person.
class
, 1L);//持久
person2.setPname(
"44");
session.save(person);
//由临时转变成持久化状态
transaction.commit();
//既有insert,又有update;
session.close();
}
/**
* 一个session中的对象持久化状态与另一个session 无关;
*/
@Test
public
void testSession(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person2 = (Person)session.get(Person.
class
, 1L);//持久化状态
person2.setPname(
"rty");
transaction.commit();
session.close();
session =
sessionFactory.openSession();//又开启了一个新的session
Transaction transaction2 = session.beginTransaction();
person2.setPname(
"56yy");
session.update(person2);
//让person2和新的session交互
transaction2.commit();
session.close();
}
|