• 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>
  • 相关阅读:
    【深入理解JAVA虚拟机】第一部分.走进Java
    【设计模式最终总结】桥接模式 VS 外观模式
    【设计模式最终总结】组合模式:树形结构的处理
    【设计模式最终总结】桥接模式(接口模式):处理多维度变化
    【设计模式最终总结】适配器模式
    深入编解码:ASCII,UNICODE,UTF8等
    好妈妈【第四章】培养良好的学习习惯
    【设计模式最终总结】建造者模式:复杂对象的组装与创建
    上火流鼻血
    Spring Data Jpa 学习笔记
  • 原文地址:https://www.cnblogs.com/loaderman/p/10037842.html
Copyright © 2020-2023  润新知