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>