p1.setName("陈星宇2");//刷新数据库数据只能刷新持久胎实体
tx.commit();//此时进行同步数据库
session.close();
}
@Test
//手工flush会刷新
public void testSessionManager3(){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
Person p1 = (Person) session.get(Person.class, 1);//得到持久对象,放入Session的缓存中
p1.setName("陈星宇");//刷新数据库数据只能刷新持久胎实体
session.flush();//同步数据库
tx.commit();//此时进行同步数据库
session.close();
}
@Test
//执行Query的查询时,也会自动把改变的实体类同步到数据库中
public void testSessionManager4(){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
Person p1 = (Person) session.get(Person.class, 1);//得到持久对象,放入Session的缓存中
p1.setName("陈星宇1");//刷新数据库数据只能刷新持久态实体
Query q = session.createQuery("from Person");//一条强制性的sql语句
System.out.println(q.list().get(0));
session.flush();//同步数据库
tx.commit();//此时进行同步数据库
session.close();
}
@Test
//验证刷新模式
public void testSessionManager5(){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
// session.setFlushMode(FlushMode.COMMIT);//事务提交和手工flush时。查询时不会刷
// session.setFlushMode(FlushMode.MANUAL);//事务提交和手工flush时。查询时不会刷
Person p1 = (Person) session.get(Person.class, 1);//得到持久对象,放入Session的缓存中
p1.setName("陈星宇");//刷新数据库数据只能刷新持久胎实体
Query q = session.createQuery("from Person");//一条强制性的sql语句
System.out.println(q.list().get(0));//从缓存中取得
tx.commit();//此时进行同步数据库
session.flush();//同步数据库
session.close();
}
//refresh:用数据库中的数据覆盖掉缓存中的数据
@Test
public void testSessionManager6(){
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
Person p1 = (Person) session.get(Person.class, 1);//得到持久对象,放入Session的缓存中
p1.setName("陈星宇");
session.refresh(p1);//用数据库中的数据覆盖掉缓存中的数据
tx.commit();//此时进行同步数据库
session.close();
}
}
以上的刷出是指把数据更新到数据库,不刷出是不把数据更新(同步)到数据库
5.hibernate中Session接口常用的方法(CUD增删改)
| //Session的常用方法 public class HibernateDemo1 { //如果实体类的主键是代理主键。手工设置的id是无效的
//save:瞬时--->持久 @Test public void test1(){ Person p = new Person(); p.setName("王东"); p.setBirthday(new Date()); p.setGender("女性"); Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction();
p.setId(100);//不管用的。 s.save(p);//计划执行一条插入语句 p.setId(10);//会报错。此时的p对象是持久态,不允许改ID的。 tx.commit();//真正执行。FlushMode.AUTO. s.close(); } //update:脱管--->持久 //如果只在脱管对象发生了变化再执行更新。
@Test public void test2(){ Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction();
Person p = (Person)s.get(Person.class, 1);//持久态 s.evict(p);//脱管 p.setName("星宇"); s.update(p);//如果是一个脱管对象,不管有没有改变,都会执行update语句
tx.commit();//真正执行。FlushMode.AUTO. s.close(); } //
//saveOrUpdate() //对象是瞬时态:OID为null,执行save。判断配置文件
//对象是脱管:OID有,执行update @Test public void test3(){ Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); //脱管-->持久:update // Person p = (Person)s.get(Person.class, 1);//持久态 // s.evict(p);//脱管 // p.setName("星宇"); // s.saveOrUpdate(p);//如果是一个脱管对象,不管有没有改变,都会执行update语句
//瞬时--->持久:save Person p = new Person(); p.setName("杨显彬"); p.setBirthday(new Date()); p.setGender("女性"); s.saveOrUpdate(p);//执行save
tx.commit();//真正执行。FlushMode.AUTO. s.close(); } //
@Test public void test4(){ Session s = HibernateUtil.getSession(); Transaction tx = s.beginTransaction(); Person p = (Person)s. |