求对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就必须得配置事务?
我看的就是源码,现在的问题是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