JiveJdon Community Forums
在线164人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 开源JdonFramework及其应用案例论坛
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 5 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
lqixv

发表文章: 56
注册时间: 2007年11月22日 09:57
“删除”问题 发表: 2008年03月28日 10:22 回复
我在使用 jdon 框架时发现一个问题:如果我不是通过 ModelListAction 或继承这个类,就去调用一个 service 进行删除操作的时候,删除总是不成功。我的一个朋友也遇到这个问题。通过跟踪发现,其实已经通过 service 调用了 dao 里的删除方法,但数据却没有删除。我然后在 dao 中,在调用删除方法前,先 loadByModelKey,然后再调用 super.delete(o),最后再调用 HibernateTemplate.closeSession();这时删除才成功。因此我猜测通过自己的 Action 来调用删除方法时,没有出发一些事务方面的操作。大家试试看有没有这个问题。
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:“删除”问题 发表: 2008年03月29日 09:41 回复
有这个BUG,需要在CloseSessionInView的关闭Session中,将事务关闭


具体是com.jdon.persistence.hibernate.util.SessionFactoryHolder类

public static void closeSession() throws HibernateException {
Transaction tr = (Transaction)getTransaction();
try {
if (tr != null && !tr.wasCommitted() && !tr.wasRolledBack()) {
getSession().flush();//flush cache to db;
getSession().clear();//clear cache;
tr.commit();
}
} catch (Exception e) {
}finally{
setTransaction(null);
getSession().close();
setSession(null);
}
}
lqixv

发表文章: 56
注册时间: 2007年11月22日 09:57
re:“删除”问题 发表: 2008年04月01日 10:05 回复
banq,删除还是不能正常进行。Hibernate 还是没有输出 delete sql 语句。

我现在对容器的注入等不是很了解,我看了一下关闭 session 的源代码,发现在一个叫 CloseSessionInViewFilter.java 中。我发现修改、添加时都没有问题,而添加、修改恰恰都在 viewAction 中,因此我大胆地从这个名字猜测一下,是不是这个过滤器只监控了 viewAction ?所以当我们自己从不是 ViewAction 中删除数据时,就没有触发这个过滤器,导致 Hibernate 没有进行删除动作?从而可以解释为什么可以进行添加修改而不能删除?
lqixv

发表文章: 56
注册时间: 2007年11月22日 09:57
re:“删除”问题 发表: 2008年04月01日 10:12 回复
刚刚又看了一下 web.xml ,发现其实这个过滤器已经监控了所有的 url 了:

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
com.jdon.persistence.hibernate.CloseSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

但这个过滤器为什么没有被触发呢?难道是条件语句中的 SessionFactoryHolder.isSessionIsActive() 为 false ?如下为在过滤器中的关闭 Hibernate session 的语句:
if (SessionFactoryHolder.isSessionIsActive()){
log.debug("Close a session!");
SessionFactoryHolder.closeSession();
}

继续追踪……
lqixv

发表文章: 56
注册时间: 2007年11月22日 09:57
re:“删除”问题 发表: 2008年04月01日 10:31 回复
CloseSessionInViewFilter 已经被掉用了。
可是奇怪的是,明明已经 closeSession 了,不知为什么没有触发 Hibernate 进行删除动作……
进一步猜测:
SessionFactoryHolder.closeSession()
和在 service 中的 HibernateTemplate 里的 closeSession 不一样。否则为什么在 service 中调用 closeSession 可以触发 Hibernate 进行删除,而这里不行呢?
[该贴被lqixv于2008-04-01 10:52修改过]
banq

发表文章: 8929
注册时间: 2002年08月03日 17:08
回复:re:“删除”问题 发表: 2008年04月01日 17:47 回复
你看看我最近新上传的Struts+jdon+hibernate应用,删除我都测试过,正常。
这个主题有 5 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam