本章重点讲述Hibernate对象的三种状态以及如何配置二级缓存

有关Hibernate的三种状态如何相互转换网上都能查到,官方文档描述的也比较详细。这里主要是针对几个重点方法做代码演示。

一、状态转换

package learnhow;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import util.HibernateUtil;
import model.example.User;

public class HibernateTest {
    private Session session;
    private Transaction transaction;

    @Test
    public void testSaveOrUpdate() {
        session = HibernateUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        // Transient状态:session缓存和数据库中都没有
        User user = new User();
        user.setUserName("Linda");
        session.save(user);
        // Persistent状态:save()方法以后,对象获得id并且在session中保留有引用
        user = (User) session.get(User.class, 1);
        transaction.commit();
        session.close();
        // Detached状态:session被关闭,数据库和内存中有对象
        user.setUserName("John");
        session = HibernateUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        // Persistent状态:此时如果使用save()方法,Hibernate会抛出异常,使用update()方法可以更新数据库数据
        session.update(user);
        // Transient状态:数据库和session缓存中都删除对象,此时对象有id值,但依然属于T状态
        session.delete(user);
        transaction.commit();
        session.close();
        user.setUserName("Bob");
        // Transient状态:有id值的T对象为了防止冲突,应该把id值重置
        user.setId(0);
        session = HibernateUtil.getSessionFactory().openSession();
        transaction = session.beginTransaction();
        // Persistent状态:重新将对象持久化
        session.saveOrUpdate(user);
        transaction.commit();
        session.close();
    }
}
HibernateTest.java

相关文章:

  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
猜你喜欢
  • 2021-06-27
  • 2022-02-24
  • 2021-08-25
  • 2022-12-23
  • 2021-12-20
  • 2021-08-15
  • 2021-11-11
相关资源
相似解决方案