我有一个持续更改的grails服务。如果我回滚服务类中的事务,抛出RuntimeException,然后(在同一个请求中)我尝试重新读取任何数据,我得到以下异常:
ERROR hibernate.LazyInitializationException - failed to lazily initialize a collection of role: <my related class> no session or session was closed
所以,案例如下:
我尝试更新服务类中的对象,如果失败,我将回滚事务。 在控制器中,处理异常,然后返回失败对象的XML。创建XML grails是尝试读取所有相关对象-lazy load 1-n relationship-(这就是我想要的),但是因为我们已经在服务类中进行了回滚,所以我没有会话,并且它失败了。 我尝试使用.withNewSession {}但它不起作用。
任何想法或解决方法?
答案 0 :(得分:1)
似乎你有Detached Object所以尝试使用merge()方法。
答案 1 :(得分:1)
首先,你是手动处理交易(听起来像是你的帖子)吗?如果您使服务事务处理,Grails将为您执行此操作。我建议不要试图自己管理tx,如果这确实是你正在做的事情。像这样的东西很复杂且容易出错,如果Grails为你做这件事,你为什么要这样做呢?
其次,听起来好像是出错,您正在尝试访问已加载的数据。由于你的会话在tx回滚时消失了,你不能这样做。如果可能的话,我会将您的错误消息更改为不依赖会话中的任何数据。即不要尝试xml-ify对象。
虽然,我不确定为什么withNewSession不起作用......我们能看到一些代码吗?