当前位置: 首页 > 面试题库 >

org.hibernate.Session.clear()被认为有害吗?

利海阳
2023-03-14
问题内容

这是一个设计问题,未提交具体代码来保护我的底部。

使用Hibernate时,标准工作流程如下:

  1. 公开会议
  2. 开始交易
  3. 做生意(读取和修改数据)
  4. 提交交易
  5. 闭幕会议

可能会重复2-4次。

Session.clear()的合理用例是什么?

答:我遇到的具体问题是一段(大型)代码,该代码可以加载和修改实体,然后清除()会话,实质上是丢弃所做的更改。(要完成的业务任务不包括修改实体,因此代码“有效”)。

在我看来,正确的设计将是确保(大)代码段不进行不想保存的更改?

B:我猜想Session.clear()的存在是为了方便/灵活,而不是因为使用它是一个好主意。

我是否误解了hibernate哲学?

C:子问题:框架代码在任务完成时无条件清除()会话是否是个坏主意?恕我直言,如果任务完成后会话脏了,框架应该抱怨!任务完成后,应关闭该会话…(不考虑当前的性能)

(标签A,B和C,因此您可以指明要回答的部分)。


问题答案:

广告。

:看起来您知道该怎么clear()做。显式调用它的原因是从L1高速缓存中删除所有受管实体,以便在一个事务中处理大型数据集时,它不会无限增长。

它丢弃了对 未明确 保留的托管实体所做的所有更改。这意味着您可以安全地修改实体,显式更新实体并清除会话。这是 正确的
设计。显然,如果不进行任何更改(长时间但只读的会话),clear()则始终是安全的。

您还可以使用无状态会话。

广告。
B
:不,存在上述原因:确保L1(会话缓存)不会增长太多。当然,手动维护它不是一个好主意,这表明应该对大型数据集使用另一种工具,但是有时这是必须的。

请注意,在JPA规范中也有clear()flush()方法。在这种情况下,应始终flush()先调用,然后再将更改推送到html" target="_blank">数据库中(显式更新)clear()

广告。 C:当用户清除带有脏更改的会话时,警告用户(也许通过发出警告消息而不是引发异常)实际上是一个好主意。另外,我不认为 框架
代码应该clear()无条件调用,除非可以确保 框架 代码中的用户代码刷新或不进行任何更改。



 类似资料:
  • 问题内容: 为什么是选择?如果添加了想要的新列,这是否意味着更少的代码更改? 我知道这在某些数据库上是性能问题,但是如果您真的想要每列,该怎么办? 问题答案: 确实有三个主要原因: 将数据转移到消费者方面效率低下。 当您选择SELECT *时,通常从数据库中检索到的列数超出了应用程序实际需要运行的列数。这将导致更多数据从数据库服务器移至客户端,从而减慢访问速度并增加计算机上的负载,并花费更多时间在

  • 问题内容: 我可能为此冒险。 在我看来,为新类明确指定serialVersionUID是不好的。考虑以下两种情况:在布局应更改的情况下不进行更改,在布局不更改的情况下进行更改。 几乎只在显式的情况下才会更改应更改的位置。在这种情况下,它会导致一些非常细微,难以发现的错误。特别是在开发期间,班级布局经常更改。但是,如果未明确指定,它将改变并且反序列化将大声中断,这很可能是通过清除存储库来解决的。 仅

  • 问题内容: 我想使用初始化一个字典集(在Python 2.6中),但是结果结构表现得很奇怪。进一步来说: 我显然不想将3加到所有集合中,而只添加到对应于的集合中。当然,可以通过不使用进行初始化来避免此问题,但是我想了解一下我在这里缺少的内容。 问题答案: 的第二个参数只是一个值。您已经创建了一个字典,该字典的设置与每个键的值 相同 。大概您了解它的工作方式: 您在那看到相同的行为;你的情况,,,(

  • 问题内容: 我正在使用该方法从服务器检索内容。最近,我遇到了一个问题,其中HTTP响应代码指示错误,但是仍然抛出了流,而不是抛出异常。这导致该错误在执行中出现得更晚,并被证明是红色鲱鱼。据我所知,当您使用此方法打开流时,无法检查HTTP响应代码。 我能找到正确处理此问题的唯一方法是 在 打开流 之前 获取连接: 那你同意吗?是否有任何安全使用openStream的良好条件,或者不建议使用openS

  • When you're managing a team of programmers, one of the first things you have to learn to get right is task allocation. That's just a five-dollar word for giving people things to do. It's known colloqu

  • Mike Murray, a surprisingly hapless HR manager at Microsoft, made a number of goofs, but the doozie was introducing a "Ship It" award shortly after he started the job. The idea was that you would get