天天看點

Hibernate對象的狀态

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>