Mor*_*cus 27 java session hibernate clear
这是一个设计问题,具体代码未提交以保护我的底层.
使用Hibernate时,标准工作流程如下:
可能迭代到2-4.
Session.clear()的合理用例是什么?
答:具体问题我已经是(大)的代码加载并修改实体,然后清除()S中的会议,基本上丢掉所做的更改.(要完成的业务任务不包括修改实体,因此代码"有效").
在我看来,正确的设计是确保(大)代码不会进行不想保存的更改?
B:我猜想Session.clear()是为了方便/灵活而存在,不是因为使用它是个好主意.
我误解了Hibernate的理念吗?
C:Subquestion:框架代码在任务完成时无条件清除()会话是一个坏主意吗?恕我直言,如果任务完成时会话是脏的,框架应该抱怨!应该关闭会话,看看任务完成...(忽略分钟的表现)
(标签A,B和C,以便您可以指出您要回答的部分).
Tom*_*icz 29
广告.答:看起来你知道是什么clear().明确调用它的原因是从L1缓存中删除所有托管实体,以便在一个事务中处理大型数据集时它不会无限增长.
它会丢弃对未明确保留的托管实体所做的所有更改.这意味着您可以安全地修改实体,明确更新它并清除会话.这是正确的设计.显然,如果没有进行任何更改(长,但只读会话),clear()总是安全的.
您还可以使用无状态会话.
广告.B:不,它存在的原因如上:确保L1(会话缓存)不会增长太多.当然,手动维护它是一个糟糕的想法,并表明另一个工具应该用于大型数据集,但有时它是必须的.
请注意,在JPA规范也有clear()和flush()方法.在这种情况下,您应始终flush()先调用以在调用之前将更改推送到数据库(显式更新)clear().
广告.C:当他/她用脏更改清除会话时,警告用户(可能通过发出警告消息而不是抛出异常)实际上是一个好主意.此外,我不认为框架代码应该clear()无条件地调用,除非它确定它运行的用户代码刷新或不做任何更改.
| 归档时间: |
|
| 查看次数: |
32269 次 |
| 最近记录: |