Spring hibernate测试session 自我忽悠

日志[url]http://japi.iteye.com/blog/264033[/url]中写了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语句...

问题解决..
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值