`

Spring hibernate测试session 自我忽悠

阅读更多
日志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语句...

问题解决..
分享到:
评论
1 楼 jinkingmanager 2010-06-21  
先flush再clear,固定模式了……

相关推荐

    Struts2 Spring Hibernate IBatis

    Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatis 只需要导入相应的jar包就行了 ,数据库是mysql :数据库名叫做mydatabase,表名...

    spring mvc + spring + hibernate 全注解整合开发视频教程 12

    6. 使用Spring测试框架进行单元测试和集成测试。 通过学习本教程,你将能够熟练地运用这三大框架进行全注解的整合开发,从而提高开发效率,打造出高质量的Java Web应用。无论你是初学者还是有经验的开发者,这个...

    Spring+hibernate整合源代码

    1. **依赖注入**:Spring 提供的 DI(Dependency Injection)机制可以帮助管理 Hibernate SessionFactory 和 Session 实例,避免手动创建和管理这些对象。在配置文件中定义 SessionFactory 的 Bean,然后通过注解或 ...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    spring-hibernate.jar

    spring-hibernate.jar

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)开发基于Struts Spring Hibernate ...

    Spring与Hibernate集成

    6. **测试和运行**: 最后,编写测试用例验证Spring和Hibernate的集成是否成功。运行应用,确保数据的持久化和检索功能正常工作。 在实际开发中,为了提高代码的可读性和可维护性,我们可以采用基于注解的配置和实体...

    Hibernate Session释放模式

    在Java的持久化框架Hibernate中,Session对象是与数据库交互的核心组件,它负责管理对象的持久状态。在处理大量数据或者长时间运行的事务时,合理地管理Session的生命周期至关重要,这就涉及到了Hibernate的Session...

    开发基于Struts Spring Hibernate Ajax的网上信息发布平台(Struts Hibernate Spring Ajax)--指导学习2

    Struts Hibernate Spring Ajax Struts Hibernate Spring Ajax

    spring mvc + spring + hibernate 全注解整合开发视频教程 11

    在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...

    spring hibernate 事务管理学习笔记(一)

    在Spring中,我们可以配置`PlatformTransactionManager`接口的实现类,如`HibernateTransactionManager`,它会自动感知Hibernate Session并管理事务。通过声明式事务管理,我们只需在方法上添加`@Transactional`注解...

    spring hibernate security整合

    在Java Web开发中,Spring、Hibernate和Spring Security是三个非常重要的框架。Spring作为一个全面的开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Hibernate则是一个强大的对象关系映射(ORM)工具...

    Struts2,Spring,Hibernate jar包下载

    HibernateJar包包含了Hibernate的核心API,如Session、SessionFactory、Query等,以及JPA支持和HQL(Hibernate Query Language)等。通过配置文件,开发者可以定义实体类和数据库表之间的映射关系,实现数据的自动...

    Spring-session2整合spring5+redis

    描述中的“spring5+hibernate5+Spring-session-data-redis2+Spring-data-redis2整合”进一步扩展了集成环境,引入了Hibernate 5作为ORM(对象关系映射)工具,Spring-session-data-redis和Spring-data-redis2则是...

    struts spring hibernate 登陆 SSH整合分页功能

    struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页struts spring hibernate 登陆 SSH整合分页功能 SSH整合分页

    webwork spring hibernate整合实例源代码全部jar包

    在IT行业中,Web开发是一个非常重要的领域,而Webwork、Spring和Hibernate是三个关键的开源框架,它们在构建复杂的企业级应用中起着至关重要的作用。这个"webwork spring hibernate整合实例源代码全部jar包"是针对...

    Spring3整合Hibernate4测试Demo

    **Spring3整合Hibernate4测试Demo** 在Java Web开发中,Spring和Hibernate是两个非常重要的框架。Spring是一个全面的后端应用程序框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)以及其他...

    Spring集成Hibernate myeclipse 下

    9. **测试**:完成以上配置后,可以编写JUnit测试用例或在MyEclipse的Run As -> Java Application中运行测试,验证Spring和Hibernate的集成是否成功,数据是否能正确存取。 总结来说,Spring集成Hibernate在...

    ZK+spring+hibernate的整合

    4. **配置ZK-Spring**:需要引入ZK-Spring的库,这是一个连接ZK和Spring的桥梁,它提供了Spring的ApplicationContext到ZK Session的绑定,使得ZK组件可以直接使用Spring的Bean。 5. **事务管理**:由于Spring对事务...

    spring hibernate,spring jdbc事务管理

    两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...

Global site tag (gtag.js) - Google Analytics