广告。
答:看起来您知道该怎么
clear()做。显式调用它的原因是从L1高速缓存中删除所有受管实体,以便在一个事务中处理大型数据集时,它不会无限增长。
它丢弃了对 未明确 保留的托管实体所做的所有更改。这意味着您可以安全地修改实体,显式更新实体并清除会话。这是 正确的
设计。显然,如果不进行任何更改(长时间但只读的会话),
clear()则始终是安全的。
您还可以使用无状态会话。
广告。
B:不,存在上述原因:确保L1(会话缓存)不会增长太多。当然,手动维护它不是一个好主意,这表明应该对大型数据集使用另一种工具,但是有时这是必须的。
请注意,在JPA规范中也有
clear()和
flush()方法。在这种情况下,应始终
flush()先调用,然后再将更改推送到数据库中(显式更新)
clear()。
广告。 C:当用户清除带有脏更改的会话时,警告用户(也许通过发出警告消息而不是引发异常)实际上是一个好主意。另外,我不认为 框架
代码应该
clear()无条件调用,除非可以确保 框架 代码中的用户代码刷新或不进行任何更改。



