0

以前我发布了一个关于* LazyIntialization 异常的解决方案的问题:找不到代理 - 会话已关闭*。但后来在我的代码中,我发现我使用 load() 方法而不是 get() 方法来检索实体对象。所以我将 load() 方法更改为 get() 并开始工作。

下面是代码片段,

Answer answerObj = HibernateTemplate.load(Answer.class,1001); --> line 1

answerObj.setPoints(2990); --> line 2

当我运行它时,它抛出了 LazyInitialization 异常:在第 2 行找不到代理。

我知道当我使用 load() 方法时,它会返回我的代理对象而不是数据库中的持久行。所以我的 Answer 对象只有 Id 值,所有其他属性都是空的。

现在在代码的第 2 行中,我试图将代理对象的 (Answer) 属性之一设置为某个值。那为什么它会抛出代理不可用异常?将值分配给代理对象属性有什么问题?

4

1 回答 1

0

Hibernate 不知道设置属性是否具有涉及其他属性的逻辑(例如验证),并且在调用真正的 setter 之前从数据库加载对象是唯一安全的事情。

于 2012-08-23T14:21:50.730 回答