@Test
public void testSave() {
System.out.println("================Save start===============");
session.getTransaction().begin();
Student s = new Student();
s.setName("zhansan");
session.save(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Save end=============");
}
@Test
public void testDelete() {
System.out.println("================Delete start===============");
session.getTransaction().begin();
Student s = new Student();
s.setId(14);
s.setName("zhansan");
session.delete(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Delete end=============");
}
@Test
public void testLoad() {
System.out.println("================Load start===============");
session.getTransaction().begin();
//第二个参数是一个主键id查询条件
Student s = (Student) session.load(Student.class,15);
session.getTransaction().commit();
/*
* get与load区别:
* get直接查询
* load延迟加载:在需要用到时才加载,如果没有用到就先不加载
*/
//log.debug("Student "+s);
System.out.println("=================Load end=============");
}
@Test
public void testGet() {
System.out.println("================Get start===============");
session.getTransaction().begin();
//第二个参数是一个主键id查询条件
Student s = (Student) session.get(Student.class,15);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Get end=============");
}
1. 用来更新detached对象,更新完成后转为persistent状态
2. 更新transient对象会报错
3. 更新自己设定id的transient对象可以(数据库有对应记录)
4. persistent状态的对象只要设定(如:t.setName…)不同字段就会发生更新
5. 更新部分更改的字段
a) xml 设定 property 标签的 update 属性,annotation 设定@Column 的 updatable
属性,不过这种方式很少用,因为不灵活(忘记)
b) 使用xml中的dynamic-update,JPA1.0 Annotation 没有对应的属性,hibernate 扩
展?
i. 同一个session可以,跨session不行,不过可以用merge()(不重要)
c) 使用 HQL(EjBQL)(建议)
@Test
public void testUpdate() {
System.out.println("================Update start===============");
session.getTransaction().begin();
Student s = new Student();
s.setId(15);
s.setName("lisi");
//第二个参数是一个主键id查询条件
session.update(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Update end=============");
}
@Test
public void testSaveOrUpdate() {
System.out.println("================Update start===============");
session.getTransaction().begin();
Student s = new Student();
s.setName("saveorupdate");
//注释 下一行 变成插入,不注释变成修改
s.setId(15);
//既可以存入 也可以修改
session.saveOrUpdate(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Update end=============");
}
@Test
public void testClear_flush() {
System.out.println("================Clear_flush start===============");
session.getTransaction().begin();
//既可以存入 也可以修改
Student s = (Student) session.load(Student.class,15);
session.clear(); //如果不注释 load 缓存中的数据被清除 报错
session.flush(); //将数据库缓存commit后都刷入数据库
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Clear_flush end=============");
}
@Test
public void testSave() {
System.out.println("================Save start===============");
System.out.println("begin");
session.getTransaction().begin();
Student s = new Student();
s.setName("zhansan");
session.save(s);
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================Save end=============");
}
@Test
public void testPesistIn() {
System.out.println("================PesistIn start===============");
Student s = new Student();
s.setName("zhansan");
System.out.println("begin");
session.getTransaction().begin();
session.persist(s);
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================PesistIn end=============");
}
@Test
public void testPesistOut() {
System.out.println("================PesistOut start===============");
Student s = new Student();
s.setName("zhansan");
session.persist(s);
System.out.println("begin");
session.getTransaction().begin();
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================PesistOut end=============");
}
package comliuhao.hibernate4.demo.function.test;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.liuhao.hibernate4.demo.function.Student;
import com.liuhao.hibernate4.demo.uril.HibernateUtil;
public class functionTest {
private Logger log = Logger.getLogger(functionTest.class);
private static SessionFactory sfactory;
private static Session session;
/**
* @throws java.lang.Exception
* @return @void
*/
@Before
public void setUp() throws Exception {
sfactory = HibernateUtil.getSessionFactory();
session = sfactory.openSession();
}
/**
* @throws java.lang.Exception
* @return @void
*/
@After
public void tearDown() throws Exception {
if (session != null)
session.close();
if (sfactory != null)
sfactory.close();
}
/*
* 准备:数据库存在 id=1的行
* 如果session没有merge(a)对象标识的相同的持久化实例,从数据库加载出实例b,实例b的值从a完全拷贝,最后返回持久化实例b
*
* 控制台输出:
1.session查询同a标识(主键)相同的对象
2. session没有,从数据库查询a标识的字段
Hibernate: select student0_.id as id1_0_0_, student0_.name as name2_0_0_ from
Student student0_ where student0_.id=?
2015-06-30 22:30:26,223 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student :Student s1 [id=1, name=ssssssssssssss]
3.数据库返回的持久化实例b的值完全从a拷贝,然后返回
2015-06-30 22:30:26,223 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student :Student s2 [id=1, name=ssssssssssssss]
*/
@Test
public void testMerge() {
session.beginTransaction();
Student s = new Student();
s.setId(1);
s.setName("ssssssssssssss");
Student s2 = (Student)session.merge(s);
log.debug("Student s1 :"+s);
log.debug("Student s2 :"+s2);
session.getTransaction().commit();
session.flush();
}
/*
* 如果session中存在相同持久化标识(identifier)的实例,a对象覆盖session中持久化实例值
*
* 控制台输出:
Hibernate: select student0_.id as id1_0_0_, student0_.name as name2_0_0_ from
Student student0_ where student0_.id=?
2015-06-30 22:46:56,520 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student str2:Student [id=1, name=2222222]
2015-06-30 22:46:56,521 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student str1:Student [id=1, name=2222222]
*/
@Test
public void testMerge2() {
Student str1 = new Student();
str1.setId(1);
str1.setName("1111111");
session.beginTransaction();
//保证session存在持久化实例
Student str2 = (Student)session.get(Student.class, 1);
str1.setName("2222222");
session.merge(str1);
log.debug("Student str2:"+str2); //这里改变了,说明持久态的数据也会改变
str2.setName("3333333");
log.debug("Student str1:"+str1); //这里不会改变,说明第一个游离态的数据没有被持久化撒;
session.clear();
}
}
evcit(obj)把某个持久化对象从session的缓存中清空。
@Test
public void testSave() {
System.out.println("================Save start===============");
session.getTransaction().begin();
Student s = new Student();
s.setName("zhansan");
session.save(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Save end=============");
}
@Test
public void testDelete() {
System.out.println("================Delete start===============");
session.getTransaction().begin();
Student s = new Student();
s.setId(14);
s.setName("zhansan");
session.delete(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Delete end=============");
}
@Test
public void testLoad() {
System.out.println("================Load start===============");
session.getTransaction().begin();
//第二个参数是一个主键id查询条件
Student s = (Student) session.load(Student.class,15);
session.getTransaction().commit();
/*
* get与load区别:
* get直接查询
* load延迟加载:在需要用到时才加载,如果没有用到就先不加载
*/
//log.debug("Student "+s);
System.out.println("=================Load end=============");
}
@Test
public void testGet() {
System.out.println("================Get start===============");
session.getTransaction().begin();
//第二个参数是一个主键id查询条件
Student s = (Student) session.get(Student.class,15);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Get end=============");
}
1. 用来更新detached对象,更新完成后转为persistent状态
2. 更新transient对象会报错
3. 更新自己设定id的transient对象可以(数据库有对应记录)
4. persistent状态的对象只要设定(如:t.setName…)不同字段就会发生更新
5. 更新部分更改的字段
a) xml 设定 property 标签的 update 属性,annotation 设定@Column 的 updatable
属性,不过这种方式很少用,因为不灵活(忘记)
b) 使用xml中的dynamic-update,JPA1.0 Annotation 没有对应的属性,hibernate 扩
展?
i. 同一个session可以,跨session不行,不过可以用merge()(不重要)
c) 使用 HQL(EjBQL)(建议)
@Test
public void testUpdate() {
System.out.println("================Update start===============");
session.getTransaction().begin();
Student s = new Student();
s.setId(15);
s.setName("lisi");
//第二个参数是一个主键id查询条件
session.update(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Update end=============");
}
@Test
public void testSaveOrUpdate() {
System.out.println("================Update start===============");
session.getTransaction().begin();
Student s = new Student();
s.setName("saveorupdate");
//注释 下一行 变成插入,不注释变成修改
s.setId(15);
//既可以存入 也可以修改
session.saveOrUpdate(s);
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Update end=============");
}
@Test
public void testClear_flush() {
System.out.println("================Clear_flush start===============");
session.getTransaction().begin();
//既可以存入 也可以修改
Student s = (Student) session.load(Student.class,15);
session.clear(); //如果不注释 load 缓存中的数据被清除 报错
session.flush(); //将数据库缓存commit后都刷入数据库
session.getTransaction().commit();
log.debug("Student "+s);
System.out.println("=================Clear_flush end=============");
}
@Test
public void testSave() {
System.out.println("================Save start===============");
System.out.println("begin");
session.getTransaction().begin();
Student s = new Student();
s.setName("zhansan");
session.save(s);
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================Save end=============");
}
@Test
public void testPesistIn() {
System.out.println("================PesistIn start===============");
Student s = new Student();
s.setName("zhansan");
System.out.println("begin");
session.getTransaction().begin();
session.persist(s);
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================PesistIn end=============");
}
@Test
public void testPesistOut() {
System.out.println("================PesistOut start===============");
Student s = new Student();
s.setName("zhansan");
session.persist(s);
System.out.println("begin");
session.getTransaction().begin();
System.out.println("flush commit");
session.flush();
session.getTransaction().commit();
log.debug("Student " + s);
System.out.println("=================PesistOut end=============");
}
package comliuhao.hibernate4.demo.function.test;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.liuhao.hibernate4.demo.function.Student;
import com.liuhao.hibernate4.demo.uril.HibernateUtil;
public class functionTest {
private Logger log = Logger.getLogger(functionTest.class);
private static SessionFactory sfactory;
private static Session session;
/**
* @throws java.lang.Exception
* @return @void
*/
@Before
public void setUp() throws Exception {
sfactory = HibernateUtil.getSessionFactory();
session = sfactory.openSession();
}
/**
* @throws java.lang.Exception
* @return @void
*/
@After
public void tearDown() throws Exception {
if (session != null)
session.close();
if (sfactory != null)
sfactory.close();
}
/*
* 准备:数据库存在 id=1的行
* 如果session没有merge(a)对象标识的相同的持久化实例,从数据库加载出实例b,实例b的值从a完全拷贝,最后返回持久化实例b
*
* 控制台输出:
1.session查询同a标识(主键)相同的对象
2. session没有,从数据库查询a标识的字段
Hibernate: select student0_.id as id1_0_0_, student0_.name as name2_0_0_ from
Student student0_ where student0_.id=?
2015-06-30 22:30:26,223 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student :Student s1 [id=1, name=ssssssssssssss]
3.数据库返回的持久化实例b的值完全从a拷贝,然后返回
2015-06-30 22:30:26,223 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student :Student s2 [id=1, name=ssssssssssssss]
*/
@Test
public void testMerge() {
session.beginTransaction();
Student s = new Student();
s.setId(1);
s.setName("ssssssssssssss");
Student s2 = (Student)session.merge(s);
log.debug("Student s1 :"+s);
log.debug("Student s2 :"+s2);
session.getTransaction().commit();
session.flush();
}
/*
* 如果session中存在相同持久化标识(identifier)的实例,a对象覆盖session中持久化实例值
*
* 控制台输出:
Hibernate: select student0_.id as id1_0_0_, student0_.name as name2_0_0_ from
Student student0_ where student0_.id=?
2015-06-30 22:46:56,520 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student str2:Student [id=1, name=2222222]
2015-06-30 22:46:56,521 [comliuhao.hibernate4.demo.function.test.functionTest]-[
DEBUG] Student str1:Student [id=1, name=2222222]
*/
@Test
public void testMerge2() {
Student str1 = new Student();
str1.setId(1);
str1.setName("1111111");
session.beginTransaction();
//保证session存在持久化实例
Student str2 = (Student)session.get(Student.class, 1);
str1.setName("2222222");
session.merge(str1);
log.debug("Student str2:"+str2); //这里改变了,说明持久态的数据也会改变
str2.setName("3333333");
log.debug("Student str1:"+str1); //这里不会改变,说明第一个游离态的数据没有被持久化撒;
session.clear();
}
}
evcit(obj)把某个持久化对象从session的缓存中清空。