日志
http://japi.iteye.com/blog/264033中写了spring测试时hibernate的session问题..
使用AbstractTransactionalDataSourceSpringContextTests类..
对于session的缓存问题.
对于查询的问题已经解决.
但更新与删除,在今天的测试中,发现没有提交数据库.
有人提出使用
this.transactionManager.commit(this.transactionStatus);
提交事务,但是这样就出现了脏数据的问题.
很是郁闷,为什么查询可以,插入可以,但就是更新与删除不可以呢..
在http://www.iteye.com/topic/70008?page=1里,有人问到两个session是不是同一个...LZ问题是肯定的,但我这儿怎么就问题得不到解决,于是自己测试下..
在
public void update(T t) {
// TODO Auto-generated method stub
System.out.println("s22"+getHibernateTemplate().getSessionFactory().getCurrentSession());
getHibernateTemplate().update(t);
System.out.println("s2"+getHibernateTemplate().getSessionFactory().getCurrentSession());
}
输入session.
在测试类中也
protected void flushSession() {
SessionFactory sessionFactory = ((SessionFactory)applicationContext.getBean("sessionFactory"));
System.out.println("s1---"+sessionFactory.getCurrentSession());
sessionFactory.getCurrentSession().clear();
sessionFactory.getCurrentSession().flush();
System.out.println("s11---"+sessionFactory.getCurrentSession());
}
也输出..
s1---SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
s11---SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
Hibernate: select article0_.id as id5_1_, article0_.cid as cid5_1_, article0_.title as title5_1_, article0_.content as content5_1_, article0_.hot as hot5_1_, article0_.author as author5_1_, article0_.loadtime as loadtime5_1_, article0_.srcfrom as srcfrom5_1_, article0_.staticHtml as staticHtml5_1_, article0_.displayTop as displayTop5_1_, columnmode1_.id as id10_0_, columnmode1_.name as name10_0_, columnmode1_.description as descript3_10_0_, columnmode1_.rightFlag as rightFlag10_0_, columnmode1_.leftFlag as leftFlag10_0_, columnmode1_.treeLevel as treeLevel10_0_ from a_article article0_ left outer join j_column columnmode1_ on article0_.cid=columnmode1_.id where article0_.id=?
s22SessionImpl(PersistenceContext[entityKeys=[EntityKey[cn.allobject.db.Article#543], EntityKey[org.java1995.model.ColumnModel#2], EntityKey[org.java1995.model.ColumnModel#1]],collectionKeys=[CollectionKey[org.java1995.model.ColumnModel.Articles#2], CollectionKey[org.java1995.model.ColumnModel.Articles#1], CollectionKey[cn.allobject.db.Article.AAttachments#543], CollectionKey[cn.allobject.db.Article.reviews#543]]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
s2SessionImpl(PersistenceContext[entityKeys=[EntityKey[cn.allobject.db.Article#543], EntityKey[org.java1995.model.ColumnModel#2], EntityKey[org.java1995.model.ColumnModel#1]],collectionKeys=[CollectionKey[org.java1995.model.ColumnModel.Articles#2], CollectionKey[org.java1995.model.ColumnModel.Articles#1], CollectionKey[cn.allobject.db.Article.AAttachments#543], CollectionKey[cn.allobject.db.Article.reviews#543]]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
发现了,两处的session是不一样的.
一处是session里没有实体.一处的里面有实体..
感觉那个LZ是不是弄错了,但后面的跟帖又没有人提出,而且LZ一直说问题已经解决..
再仔细比照下代码
protected void flushSession() {
SessionFactory sessionFactory = ((SessionFactory)applicationContext.getBean("sessionFactory"));
System.out.println("s1---"+sessionFactory.getCurrentSession());
sessionFactory.getCurrentSession().clear();
sessionFactory.getCurrentSession().flush();
System.out.println("s11---"+sessionFactory.getCurrentSession());
}
啾..在flush之前写了一个clear方法..
也就是把session中的实体清空了...所以flush也就没有实质的作用了..
把clear注释,或者放到flush的后面,测试成功...
在控制台也看到了生成的update delete sql语句...
问题解决..
分享到:
相关推荐
springmvc spring hibernate整合Demo 包含了CRUD 帮助初学者快速学习springmvc
Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatis 只需要导入相应的jar包就行了 ,数据库是mysql :数据库名叫做mydatabase,表名...
spring-hibernate.jar
struts2 spring hibernate框架技术与项目实战 光盘源码 上 资源150M必须分成3部分上中下
Struts Hibernate Spring Ajax Struts Hibernate Spring Ajax
Spring+Hibernate 使用TransactionInterceptor声明式事务配置
spring mvc + spring + hibernate 全注解整合开发视频教程 11
spring hibernate ext项目
spring hibernate security整合
spring mvc + spring + hibernate 全注解整合开发视频教程 12
Struts Spring Hibernate整合实践
struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页
开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--Chapter1
以上是springmvc+spring+hibernate整合基于eclipse,oracle开发
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
开发基于Struts Spring Hibernate Ajax开发基于Struts Spring Hibernate Ajax
Spring+hibernate整合源代码 结束Sping+hibernate 的使用方法 包括演示示例
struts2 spring hibernate 整合
使用mysql数据库的struts2 spring hibernate整合简单示例,也可参考我的:“struts2 spring hibernate整合要点、注意点”这篇文档来配置
详细讲解了S2SH框架技术的基本知识和使用方法,从Eclipse开发平台、JSP、Servlet等基础知识讲起,由浅入深,重点介绍了当前流行的三个轻量级开源框架:Struts2、Spring和Hibemate.