1

如果我在控制器中创建域对象并且不调用.save(),Grails 会在某个时候自动为我执行此操作。我正在创建许多域对象,但没有计划保存所有这些对象,并在我的服务退出时出现“引用未保存的瞬态实例”异常。

当控制器/服务退出时,我如何获得 Grails 将尝试保存的所有对象的列表,以便我可以防止其中一些对象被保存?

4

1 回答 1

3

您最好检索您知道您将编辑但不希望使用该read方法而不是get. Usingread不会使它成为只读的,因为如果你调用save()它并且它被修改了,它将被持久化,但是当 OSIV 拦截器刷新会话时它不会自动持久化。

另一种选择(特别是如果没有单独加载实例)是detach()在您编辑它时将其从会话中删除。

您还可以使用 DTO 并将数据复制到那些非持久类中,这样您就不会使用持久类,而只是 Hibernate 不知道的数据类。

于 2012-08-14T00:36:52.480 回答