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>
原文地址:https://www.cnblogs.com/loaderman/p/10037842.html