我正在使用2.5,并通过注释进行所有操作。
我有一个简单的表格,允许用户编辑对象。它后面的控制器创建该对象,并将其添加到GET上的模型中,并在POST(提交)上处理更改。它工作正常,但我不明白为什么。该对象永远不会显式添加到会话中,并且该对象的“id”不会传递给Submit方法。控制器的Submit方法如何知道对象的“id”值?
出现此问题的原因是,我有另一个与上面的表单/控制器几乎相同的表单/控制器,但是除非将对象添加到@SessionAttributes,否则它不会“起作用”。区别在于此特定控制器使用的对象具有对另一个延迟加载的对象的引用(我在后台使用Hibernate)。当我提交表单而不将父对象放在SessionAttributes中时,我得到了DataIntegrityViolationException,因为我从不加载引用的对象。
当我将父对象添加到@SessionAttributes时,问题神奇地消失了。我神奇地说是因为即使我将父对象放入GET会话中,我仍然从未显式加载引用的对象,因此它应该为null(或空代理或发生任何情况)。
到底是怎么回事?我需要一些帮助!
最佳答案
该对象最有可能在提交阶段重新创建。该ID可能“存储”在隐藏的表单字段中。
您应该谨慎使用会话属性,除非我有很好的理由,否则我总是尽量避免使用它。与Hibernate结合使用时,可能会引起各种头痛。
如果必须,请使用完全初始化的副本。