求对hibernate源码了解的大神!关于hibernate4及以上版本---不配置事务,dao类继承自HibernateDaoSupport

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求对hibernate源码了解的大神!关于hibernate4及以上版本---不配置事务,dao类继承自HibernateDaoSupport相关的知识,希望对你有一定的参考价值。

在hibernate3以前,不配置事务的话,dao类继承自HibernateDaoSupport,调用方法
this.getHibernateTemplate().save(u);可以保存成功。
hibernate3源码:
HibernateTemplate--》doExecute
//逻辑就是给session设置flush模式,由于默认的flush模式式auto,因此就使用默认的
previousFlushMode = applyFlushMode(session, existingTransaction);
enableFilters(session);
Session sessionToExpose =
(enforceNativeSession || isExposeNativeSession() ? session : createSessionProxy(session));
T result = action.doInHibernate(sessionToExpose);
//由于是自动,因此会立刻进行flush操作,保存入库成功
flushIfNecessary(session, existingTransaction);
return result;

但是对于hibernate4,如果没有配置事务,就会报错
Write operations are not allowed in read-only mode (FlushMode.MANUAL)
hibernate4源码:
HibernateTemplate--》doExecute
------------------------------doExecute---------------------------------------
Session session = null;
boolean isNew = false;
try
//由于没有开启事务,所以一步会抛异常,session为null
session = getSessionFactory().getCurrentSession();

catch (HibernateException ex)
logger.debug("Could not retrieve pre-bound Hibernate session", ex);

if (session == null) //开启一个新事务,设置了session的flush模式为手动的,
正是因为这个属性FlushMode.MANUAL才导致报错。其实如果没有执行setFlushMode,默认是auto,那么执行情况就跟hibernate3一样了
session = getSessionFactory().openSession();
session.setFlushMode(FlushMode.MANUAL);
isNew = true;


try
enableFilters(session);
Session sessionToExpose =
(enforceNativeSession || isExposeNativeSession() ? session : createSessionProxy(session));
return action.doInHibernate(sessionToExpose);

------------------------------doExecute---------------------------------------

到底有没有解决方法,如果没有配置事务,更新实体对象?还是hibernate4就必须得配置事务?

参考技术A 你需要将hibernate的原码给关联起来,按照他的提示即AttatchSource,一般下载的jar包里面貌似三有src.zip这个文件,或者你在项目lib里面找到这个类,当然是按照路径来咯,这个比较麻烦,不知道你设置过jdk的源码没有,过程跟那个差不多追问

我看的就是源码,现在的问题是hibernate4通过hibernatedao不允许非事务操作吗?必须要配置事务吗?hibernate3相同的操作下就能插入到数据库中。

Hibernate简介


1.Hibernate概述

  Hibernate是非常优秀、成熟的O/R Mapping(Object relationShip Mapping)框架。它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用面向对象编程思维来操纵数据库

  Hibernate可以应用在任何使用JDBC的场合,既可以应用与Java的客户端程序,也可以在Servlet/JSP的Web应用中使用

  Hibernate提供了强大的对象和关系数据库映射以及查询功能


2.Hibernate优势

  开放源代码

  易于与其他开发框架的集成

  属于轻量级框架,配置过程简单


3.O/R Mapping 简介


4.建立持久化类

5.Hibernate映射关系构建

  Hibernate 通过XML文件实现持久化类与数据库关系表之间建立关联。

6.Hibernate核心接口

 


 

以上是关于求对hibernate源码了解的大神!关于hibernate4及以上版本---不配置事务,dao类继承自HibernateDaoSupport的主要内容,如果未能解决你的问题,请参考以下文章

websphere启动报/WEB-INF/applicationContext-orm- hibernate.xml]: Could not resolve placeholder 'hibe

Hibernate

Hibernate笔记

Hibernate简介

Hibernate 使用注释

Hibernate框架基础