我正在使用 2.5 并通过注释做所有事情。
我有一个简单的表单,允许用户编辑对象。它背后的控制器创建对象并在 GET 上将其添加到模型中,并在 POST(提交)上处理更改。它工作正常,但我不明白为什么。对象永远不会显式添加到会话中,并且对象的“id”不会传递给提交方法。控制器的提交方法如何知道对象的“id”值?
出现这个问题的原因是我有另一个表单/控制器,它与上面的几乎相同,但除非我将对象添加到@SessionAttributes,否则它不会“工作”。不同之处在于这个特定控制器使用的对象引用了另一个延迟加载的对象(我在幕后使用 Hibernate)。当我提交表单而不将父对象放入 SessionAttributes 时,我会收到 DataIntegrityViolationException,因为我从不加载引用的对象。
当我将父对象添加到 @SessionAttributes 时,问题神奇地消失了。我说的很神奇,因为即使我在 GET 上将父对象放入会话中,我仍然从未显式加载引用的对象,因此它应该为 null(或空代理或发生任何情况)。
世界上到底发生了什么?我需要一些帮助!