目录
1. Hibernate中4种对象状态;
临时状态(transient):
刚用new语句创建,还没有被持久化,并且不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。
持久化状态(persistent):
已经被持久化,并且加入到Session的缓存中。处于持久状态的Java对象被称为持久化对象。
删除状态(removed):
不再处于Session的缓存中,并且Session已经计划将其从数据库中删除。处于删除状态的Java对象被称为删除对象。
游离状态(detached):
已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。
测试代码:
package com.java.service;
import com.java.model.Student;
import com.java.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class StudentTest {
public static void main(String[] args) {
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
//临时状态
Student s1=new Student();
s1.setName("张三");
Student s2=new Student();
s2.setName("李四");
//持久化对象
session.save(s1);
session.save(s2);
//删除状态
session.delete(s2);
//游离状态
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
//游离状态也可以取其对象
System.out.println(s1.getName());
//删除状态也可以取其对象
System.out.println(s2.getName());
}
}
2. Session常用方法讲解;
save()方法:
将一个临时对象转变成持久化对象
package com.java.service;
import com.java.model.Student;
import com.java.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
public class TeacherTest {
public static void main(String[] args) {
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
//临时对象
Student s1=new Student();
s1.setName("小李");
Student s2=new Student();
s2.setName("小王");
//持久化对象
session.save(s1);
session.save(s2);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
}
}
Load()方法和get()方法:
相同点:
都是根据OID从数据库中加载一个持久化对象;
不同点:
1. 假如数据库中不存在与OID对应的记录,Load()方法会抛出异常,而get()方法返回null;
2. load方法默认采用延迟加载策略,get方法采用立即检索策略;
先采用Load方法;
//数据库student表中不存在id为6的数据
Student s=(Student)session.load(Student.class,Long.valueOf(6));
System.out.println(s);
运行结果:显然报错!
再看看get方法;
//数据库student表中不存在id为6的数据
Student s=(Student)session.get(Student.class,Long.valueOf(6));
System.out.println(s);
运行结果:返回null;
update()方法:
将一个游离对象转换为持久化对象
saveOrUpdate()方法:
包含了save()和update()方法;
若是临时对象,则调用save方法;
若是游离对象,则调用update方法;
merge()方法:
合并对象;
delete()方法:
删除对象;