我偶然发现了一个通过重构解决的问题,但是对于刷新会话时grails如何尝试持久化某些东西,我有些不太了解。问题是这样的:
a method returned an existing record as read only
another method checked if action was necessary:
create new related instance
add existing record to new instance hasMany association
call a validate service method on the new instance
a cross service call is transactional. this triggers a flush
ERROR-> object references unsaved transient instance- the newly created instance
我修复了流程,但是我不完全理解为什么此时任何一个对象都试图保存。
新实例尚未与会话上下文关联。 现有记录是只读的,因此也不应尝试保存。
该服务未在任何一个对象上调用save-它正在执行一些触发的操作,但未直接在这两个记录上进行。
我希望有必要显式调用newInstance.save()或session.setReadOnly(existing,false),以便会话刷新可以对这两个记录中的任何一个进行操作。有什么可能导致只读在后台被忽略吗?