编辑5/11/2011:

我想这比下面的要差一些;在已部署的质量检查实例中,如果我多次刷新主仪表板,最终将删除用户的多对多组关联。此时,在服务器端仅调用select语句;希望这些最新测试能将其范围缩小。

原文:

大家好。我对一个相当复杂的对象有疑问;问题如下:当我将对象从客户端发送到服务器进行保存时,它似乎是在随机擦除关联对象上的多对多关系。更糟糕的是,在意识到问题大约两个月之后,我无法自己重现该问题。我有该应用程序可以与质量检查小组进行测试;他们每天都在使用该程序,两次输入新的和旧的应用程序。该问题每天最多出现3次。

我将尽我所能提供尽可能多的细节,并非常感谢大家的关注!

应用程序框架为GWT 2.1 + Gilead + Hibernate 3 + MySQL InnoDB。我让Hibernate处理所有的级联等,尽管所有外键都在数据库中设置,但是在数据库中没有定义。

以下是一些摘录: 通用标签

保存对象很简单,只需调用saveOrUpdate(): 通用标签

Close'updateUser'是用户登录时加载的对象。它已加载了相关的组和权限,因此系统可以授予/拒绝对应用程序模块的访问。我会 通用标签

在将对象发送回服务器之前。

应用程序中还有许多其他地方可以进行这种操作,但不会引起不良的副作用。可能归结为与Close对象相关的客户端代码的复杂性,或者更确切地说,是我对它的实现。

我花了很多时间浏览Hibernate的官方文档,寻找可能的相关问题,等等,我认为也许是寻求帮助的好时机。我必须坚持并坚持下去,但是也许问一下就能帮助我解决问题。

我不确定现在还提供什么相关的内容。希望到目前为止,这里有什么意义!

感谢您的收听!

修改 通用标签

似乎是在此插入之后立即进行删除。.先前的操作全都是选择。但是,用户中的任何内容都不应从最近的项目中层叠。

有帮助吗?

解决方案

经过大量研究,我得出了一些结论并能够采取行动。首先,我在Gilead论坛上进行了大量搜索后了解到,它不再是积极维护。应该早点注意到。同时,我开始阅读有关RequestFactory的信息,经过几天的研究,决定我应该尝试迁移到此。

这是一个相当大的项目,大约有50个域对象,有些对象具有许多对象关联。从使用Gilead + GWT RPC到专门使用RequestFactory,我花了大约40-50个小时来重写所有内容。我对由此产生的代码和结构更改感到非常满意。到目前为止,我不必创建DTO代理对象,因此我并没有因此而烦恼,我借此机会切换到了Hibernate Annotations,摆脱了映射文件。

有时很难重构代码以利用RequestFactory所需的获取/编辑/保存周期。它的确给了我改进某些代码的机会。

好消息是,问题已解决。没有更多的多对多关联被神秘删除。我最好的猜测是我遇到了Gilead中的错误,或者我的用法不正确,或者有可能在迁移到注释时解决了一个问题。

在学习RequestFactory + Hibernate时,我遇到了一些很棒的资源,其中很多都是通过StackOverflow进行的(再次感谢!):

将GWT RequestFactory与Objectify结合使用 -很高兴了解RequestFactory如何与后端交互,以及一些减少代码的方法和样板。

希望下面有更多链接。.我仍然是菜鸟,所以我只能发布#个超链接了:)

我学到了很多东西,并且能熟练使用RequestFactory。我会竭尽所能,在我认为可以的地方提供帮助。

感谢StackOverflow!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top