利用Hibernate3.6.10进行CRUD操作(二)

2014-11-23 23:34:42 · 作者: · 浏览: 1
erson.class, 1);//得到持久对象,放入Session的缓存中

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.