hibernate中Session.flush()方法介绍

2025-10-05 20:41:00

1、flush()方法是使数据库表中的记录和Session缓存中的对象的状态保持一致,为了保持一致,则可能会发送对应的ssql语句。

在Transaction的commit()方法中:调用session的flush方法,再提交事务。

hibernate中Session.flush()方法介绍

hibernate中Session.flush()方法介绍

2、flush()方法可能会发送sql语句,但不会提交事务。

package com.gwolf;

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.gwolf.domain.News;

public class HibernateTest {

        private SessionFactory sessionFactory;

        

        private Session session;

        

        private Transaction transaction;

        

        @Before

        public void  init() {

                //创建Configuration对象

                Configuration configuration =  new Configuration().configure();

                //创建一个ServiceRegistry对象,hibernate的任何配置和服务都需要在该对象中注册后才有效

                ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().

                                applySettings(configuration.getProperties()).buildServiceRegistry();

                //创建一个SessionFactory对象

                sessionFactory = configuration.

                                buildSessionFactory(serviceRegistry);

                //创建一个Session对象

                session = sessionFactory.openSession();

                //开启事务

                transaction = session.beginTransaction();

        }

        

        @After

        public void destroy() {

                //提交事务

                transaction.commit();

                session.close();

                sessionFactory.close();

        }

        

        @Test

        public void test() {

                News news = (News)session.get(News.class, 1);

                

                news.setAuthor("oracle16");

                

                session.flush();

        }

        

}

package com.gwolf;

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.gwolf.domain.News;

public class HibernateTest {

        private SessionFactory sessionFactory;

        

        private Session session;

        

        private Transaction transaction;

        

        @Before

        public void  init() {

                //创建Configuration对象

                Configuration configuration =  new Configuration().configure();

                //创建一个ServiceRegistry对象,hibernate的任何配置和服务都需要在该对象中注册后才有效

                ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().

                                applySettings(configuration.getProperties()).buildServiceRegistry();

                //创建一个SessionFactory对象

                sessionFactory = configuration.

                                buildSessionFactory(serviceRegistry);

                //创建一个Session对象

                session = sessionFactory.openSession();

                //开启事务

                transaction = session.beginTransaction();

        }

        

        @After

        public void destroy() {

                //提交事务

                transaction.commit();

                session.close();

                sessionFactory.close();

        }

        

        @Test

        public void test() {

                News news = (News)session.get(News.class, 1);

                

                news.setAuthor("oracle165");

                

                session.flush();

        }

        

}

hibernate中Session.flush()方法介绍

hibernate中Session.flush()方法介绍

3、在未提供事务或显示的调用session.flush()方法之前,也有可能会进行flush()操作。

执行HQL或QBC查询会先调用flush()操作,以得到数据表的最新记录。

package com.gwolf;

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.gwolf.domain.News;

public class HibernateTest {

        private SessionFactory sessionFactory;

        

        private Session session;

        

        private Transaction transaction;

        

        @Before

        public void  init() {

                //创建Configuration对象

                Configuration configuration =  new Configuration().configure();

                //创建一个ServiceRegistry对象,hibernate的任何配置和服务都需要在该对象中注册后才有效

                ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().

                                applySettings(configuration.getProperties()).buildServiceRegistry();

                //创建一个SessionFactory对象

                sessionFactory = configuration.

                                buildSessionFactory(serviceRegistry);

                //创建一个Session对象

                session = sessionFactory.openSession();

                //开启事务

                transaction = session.beginTransaction();

        }

        

        @After

        public void destroy() {

                //提交事务

                transaction.commit();

                session.close();

                sessionFactory.close();

        }

        

        @Test

        public void test() {

                News news = (News)session.get(News.class, 1);

                

                news.setAuthor("oracle1652");

                

                News news2 = (News) session.createCriteria(News.class).uniqueResult();

                System.out.println(news2);

        }

        

}

hibernate中Session.flush()方法介绍

4、我们查看控制台打印的sql语句,在执行查询之前,首先执行了更新操作。

hibernate中Session.flush()方法介绍

5、若记录的id是由底层数据库使用自增的方式生成的,则在调用save()方法后,就会立即发送insert语句,因为save方法后,必须保证对象的id是存在的。

package com.gwolf;

import java.util.Date;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import org.hibernate.service.ServiceRegistry;

import org.hibernate.service.ServiceRegistryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import com.gwolf.domain.News;

public class HibernateTest {

        private SessionFactory sessionFactory;

        

        private Session session;

        

        private Transaction transaction;

        

        @Before

        public void  init() {

                //创建Configuration对象

                Configuration configuration =  new Configuration().configure();

                //创建一个ServiceRegistry对象,hibernate的任何配置和服务都需要在该对象中注册后才有效

                ServiceRegistry  serviceRegistry = new ServiceRegistryBuilder().

                                applySettings(configuration.getProperties()).buildServiceRegistry();

                //创建一个SessionFactory对象

                sessionFactory = configuration.

                                buildSessionFactory(serviceRegistry);

                //创建一个Session对象

                session = sessionFactory.openSession();

                //开启事务

                transaction = session.beginTransaction();

        }

        

        @After

        public void destroy() {

                //提交事务

                transaction.commit();

                session.close();

                sessionFactory.close();

        }

        

        @Test

        public void test() {

                News news = new News("mysql", "aa", new Date());

                session.save(news);

        }

        

}

hibernate中Session.flush()方法介绍

6、从控制台打印的sql语句可以看出,在提交事务之前,sql语句已经执行了,如果id是hibernate生成,则会在commit方法执行性才执行插入语句。

hibernate中Session.flush()方法介绍

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢