Hibernate中对象的状态: 临时/瞬时状态、持久化状态、游离状态。
临时状态
特点:
直接new出来的对象;
不处于session的管理;
数据库中没有对象的记录;
持久化状态
当调用session的save/saveOrUpdate/get/load/list等方法的时候,对象就是持久化状态。
处于持久化状态的对象,当对对象属性进行更改的时候,会反映到数据库中!
特点:
处于session的管理;
数据库中有对应的记录;
游离状态
特点
不处于session的管理;
数据库中有对应的记录
Session关闭后,对象的状态;
对象状态的转换
package loaderman.a_status; public class User { private int userId; private String userName; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + "]"; } }
package loaderman.a_status; import java.util.HashSet; import java.util.Set; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import org.junit.Test; public class App1_status { private static SessionFactory sf; static { sf = new Configuration() .configure() .addClass(User.class) // 测试时候使用 .buildSessionFactory(); } //1. 对象状态的转换 @Test public void testSaveSet() throws Exception { Session session = sf.openSession(); session.beginTransaction(); // 创建对象 【临时状态】 // User user = new User(); // user.setUserName("Jack22222"); // 保存 【持久化状态】 // session.save(user); // user.setUserName("Jack333333"); // 会反映到数据库 // 查询 User user = (User) session.get(User.class, 1); user.setUserName("Tomcat");// hibernate会自动与数据库匹配(一级缓存),如果一样就更新数据库 session.getTransaction().commit(); session.close(); user.setUserName("Jack444444444"); // 打印 【游离状态】 System.out.println(user.getUserId()); System.out.println(user.getUserName()); } @Test public void bak() throws Exception { Session session = sf.openSession(); session.beginTransaction(); session.getTransaction().commit(); session.close(); } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="loaderman.a_status"> <class name="User" table="t_user"> <id name="userId" column="id"> <generator class="native"></generator> </id> <property name="userName"></property> </class> </hibernate-mapping>