sessionfactory的目的:产生session,维护数据库连接池

测试文件里的sessionfactory创建数据库连接,所以sessionFactory通过配置文件里的配置信息产生一个数据库连接池, 从中取出一个数据库连接.

sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();

configure用于调用数据库信息, configure()里面可以指定hibernate.cfg.xml的名字

openSession() 永远是创建一个新的session, 此session需要close,

而getCurrentSession()如果环境上下文中有session就拿环境中的, 没有就建新的, 不需要close.

用getCurrentSession调用一个session:

@Test
public void testTeacherSave() {
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());
//Session session = sessionFactory.openSession();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
Session session2 = sessionFactory.getCurrentSession();
System.out.println(session == session2);
session.getTransaction().commit();
Session session3 = sessionFactory.getCurrentSession();
System.out.println(session == session3);
}
结果: 第一个 true, 第二个false
因为第一个session被commit了
getCurrentSession方法的用途:界定事务边界, 事务提交后自动close.
在addUser的时候同时调用两个方法, 增加用户和增加日志, UserDAO,LogDAO,为了同步, 要使用同一个session
上下文在hibernate.cfg.xml配置文件里有指定:
 <property name="current_session_context_class">thread</property>

取值范围: jta,thread,managed,custom.class

current_session_context_class有两种: jta, thread

thread一般使用connection, 管理事务, auto_commit设为1, 无异常commit, 有异常rollback.

但是有一种事务使用一个connection无法管理, 比如有个类要同时操作两个数据库, 需要事务管理器, TransactionManager来同时管理 两个数据库. TM由application server实现,  weblogic和jboss也可以但是tomcat本身不可以, 但是可以通过spring实现,

此种事务就叫 JTA事务,

事务有两种, 一种是connection, 只针对一个数据库, 而JTA针对分布式数据库.

JTA: JAVA Transaction API.   JPA: JAVA Persistence API.

  

  

  

hibernate--coreapi--configuration sessionfactory--getcurrentsession--opensession的更多相关文章

  1. Hibernate学习---Configuration,Session,SessionFactory

    上一节我们讲到了Hibernate的测试,并且给出了测试代码,刚开始看见这个测试代码的同学估计是一头雾水把,所以这一节我们来讲一下测试代码. 本节主要内容: Configuration Session ...

  2. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. sessionFactory.getCurrentSession()的引出

    当业务逻辑中需要开启事务执行,业务逻辑也要调用底层操作数据库的函数,那函数也要开启事务操作. 如果用sessionFactory.openSession()的话会引起处理不在同一个事务中,会造成出错. ...

  4. hibernate中Configuration类的作用

    问题:我们在获得一个SessionFactory对象的时候经常是写下面这行代码: SessionFactory sessionFactory = new Configuration().configu ...

  5. Hibernate初始化创建SessionFactory,Session,关闭SessonFactory,session

    1.hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuratio ...

  6. Spring整合Hibernate 一 - 注入SessionFactory

    Spring3 整合 Hibernate4 - 注入SessionFactory 版本: spring-framework-3.2.4.RELEASE hibernate-release-4.2.5. ...

  7. Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

    1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...

  8. hibernate之Configuration对象

    任务:读取主配置信息 1.  Configuration config = new Configuration();      使用hibernate,但并没有读取 2.  config.config ...

  9. Exception 03 : org.hibernate.MappingException: Unknown entity: org.hibernate.cfg.Configuration

    异常名称 org.hibernate.MappingException: Unknown entity: org.hibernate.cfg.Configuration 异常详细信息 org.hibe ...

  10. java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

    java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration 最近在做项目的时候遇到了这个问题,很是困扰,多次尝试后发现是jar包的问 ...

随机推荐

  1. 把perl脚本编译成exe

    来源:http://www.veryhuo.com/a/view/38338.html 今天想把 perl 脚本编译成 exe 以便脱离 perl 解释器独立运行.都可以生成PERL的PE文件,在PE ...

  2. 事件委托小demo(jq版)

    <style type="text/css"> * { margin:; padding:; } .box1 { width: 200px; height: 60px; ...

  3. 使用jstl标签遍历双层的map(map下面的map)

    <c:forEach var="firstMap" items="${map}"> <c:forEach var="secondMa ...

  4. Greedy Change

    Greedy Change time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  5. Shell特殊变量列表

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  6. 关于前台主键输入错误对后台hibernate方法的影响

    由于前台输入时开始不小心打错了主键为value=“${conf_id}”/ 导致后台得到的主键不是数字“1”而是“1/”所以到后台就算是进的updata方法结果运行的却是添加方法 原因可能是传入的对象 ...

  7. (一)Python之猜数游戏

    猜数游戏由简如深的编码学习过程: 3次机会: print('------------------我爱鱼C工作室------------------')count=0while count < 3 ...

  8. 文字在边界自动换行word-wrap:break-word

    div容器内中内容将在边界内换行,(word-wrap)英语句子中单词内不强制换行.(word-break)如果需要词内换行

  9. HDU 3966 Aragorn's Story 动态树 树链剖分

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. python socket编程---从使用Python开发一个Socket示例说到开发者的思维和习惯问题

    今天主要说的是一个开发者的思维和习惯问题. 思维包括编程的思维和解决一个具体问题的分析思维,分析思路,分析方法,甚至是分析工具. 无论是好习惯还是不好的习惯,都是在者一天一天的思维中形成的.那些不好的 ...