Hibernate学习之SessionFactory

由于SessionFactory是一个重量级的类,在一个应用中我们需要做成单例的,我选择的做法是: `

1 import org.hibernate.SessionFactory; 2 import org.hibernate.cfg.Configuration; 3 final public class Utils { 4 5 private static SessionFactory sessionFactory=null; 6 static{ 7 //创建SessionFactory会话工厂 8 sessionFactory=new Configuration().configure().buildSessionFactory(); 9 } 10 private Utils(){ 11 } 12 13 public static SessionFactory geSessionFactory(){ 14 return sessionFactory; 15 } 16 } 17 `

这样就可以在需要的地方直接调用

1 SessionFactory factory=Utils.geSessionFactory(); 2 3 Session s1=factory.openSession(); 4 Session s3=factory.getCurrentSession();

openSession()是打开一个Session,因此每次得到的Session都不一样

getCurrentSession()是得到当前线程的一个Session,在一个thread中使用该方法得到的Session都是同一个Session 但是在使用getCurrentSession()前需要在hibernate.cfg.xml中做如下配置:

1 <!-- java程序 --> 2 <property name="current_session_context_class">thread</property> 3 <!-- web程序 --> 4 <property name="current_session_context_class">jta</property>

否则会报如下错误: No CurrentSessionContext configured!
在使用getCurrentSession()得到的session做查询操作(load())时需要使用事务,否则 会报如下错误:

      Exception in thread "main" org.hibernate.HibernateException: load is not valid without active transaction

而且这个session是自动关闭的

1 使用load()查询时,如果查询不到,则会返回null, load()使用一种代理机制,如果不使用查询得到的对象,则不会执行SQL语句,只有使用对象时才会执行SQL语句 【懒加载】 2 3 get()查询,如果查询不到,则会抛出异常,且在查询时就执行SQL语句,不管查询的结果会不会使用
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

个人博客开发之blog-api项目统一结果集api封装

前言由于返回jsonapi格式接口,所以我们需要通过javabean封装一个统一数据返回格式,便于和前端约定交互,状态码枚举ResultCodejavapackagecn.soboys.core.ret;importlombok.Getter;/@authorkenx@version1.0@date2021/6/1715:35

前端性能优化 - 雅虎军规

无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的