Java

Hibernate学习笔记 | Session详解

2019-08-09  本文已影响2人  一颗白菜_

Session概述

Session缓存

假设有代码如下:

News news = session.get(News.class,1);
System.out.println(news);
News news1 = session.get(News.class,1);
System.out.println(news1);

上述代码会输出news对象和news1对象,但是只会打印一次SQL语句。
第一个News对象会去Session缓存中查找有没有要查找对象的引用,没有就去查数据库。查完数据库就把该对象的引用存入Session缓存,然后第二个News对象去Session查的时候,发现有待查找对象的引用,即不用去数据库中查询了。

操作Session缓存的三个方法

flush缓存

持久化对象的状态

对象的转换图

四种对象之间转换图

Session中save()方法

Session中persist()方法

Session中的get()和load()

Session中的update()方法

<hibernate-mapping>
    <!--加入select-before-update="true" -->
    <class name="com.cerr.hibernate.helloworld.News" table="news" schema="hibernate5" select-before-update="true">
        <id name="id" column="id"/>
        <property name="title" column="title"/>
        <property name="author" column="author"/>
        <property name="date" column="date"/>
    </class>
</hibernate-mapping>

Session中的saveOrUpdate()

Session中的delete()

Session中的evict()

从Session缓存中把指定的持久化对象移除。
示例:

package com.cerr.hibernate.helloworld;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;

public class NewsTestTest {
    private SessionFactory sessionFactory;
    private Session session;
    private Transaction transaction;

    @Before
    public void init() throws Exception {
        Configuration configuration = new Configuration().configure();
        sessionFactory = configuration.buildSessionFactory();
        session = sessionFactory.openSession();
        transaction = session.beginTransaction();
    }

    @After
    public void destory() throws Exception {
        transaction.commit();
        session.close();
        sessionFactory.close();
    }

    @Test
    public void testEvict(){
        News news = session.get(News.class,1);
        News news1 = session.get(News.class,2);
        session.evict(news);
        news.setAuthor("aa");   //不会修改
        news1.setAuthor("bb");  //会修改
    }

Hibernate与触发器协同工作产生的问题

上一篇 下一篇

猜你喜欢

热点阅读