【问题标题】:Hibernate: load vs get休眠:加载与获取
【发布时间】:2011-12-14 18:39:20
【问题描述】:

我知道这是一个被多次描述的常见问题。 但我仍然无法得到一些东西——性能呢?哪种方法更快?

实际上,我需要一个简单的东西:页面发出 POST 请求:id=0,name='John'。服务器端脚本应检查 id=0,然后在 DB 中创建新记录,否则更新现有记录。

我认为 get() 对我来说更有用,因为如果 DB 中不存在记录,它将返回 NULL,而 load() 可以返回一些临时对象。对吗? 谢谢

【问题讨论】:

  • 这取决于很多事情。可能是大多数底层数据库。另外找到/未找到的比例是多少?从您的表述看来,您似乎预计会有很多“失误”。
  • found/not found 表示具有此类 id 的记录实际上存在于数据库中。假设我需要一些独特的方法来检查数据库中是否存在记录(通过 load() 或 get() 方法),但不以牺牲性能为代价
  • 这个描述很清楚gmarwaha.blogspot.com/2007/01/…
  • 是的,但是比率是多少,即“未找到”与“找到”的概率是多少。
  • 廉价的解决方案是对您在条件 id 列中使用的表执行计数查询。如果您要检索大对象以检查它是否在数据库中,这可能会有所帮助。

标签: java hibernate


【解决方案1】:

这是 Hibernate 论坛中等效问题的链接,这是我的 google 查询 (Hibernate load vs get) 中的第一个结果:https://forum.hibernate.org/viewtopic.php?p=2387456

它声明如下:

load() 方法较旧;由于用户原因,get() 被添加到 Hibernate 的 API 要求。差别不大:

如果 load() 无法在缓存或数据库中找到对象,则异常是 抛出。 load() 方法永远不会返回 null。 get() 方法返回 如果找不到对象,则为 null。

【讨论】:

  • 我看到了这个话题。问题更像是:load() 方法是否比 get() 更快?或者反之亦然
  • @nKognito 查看 Hibernate 3.4 源代码并没有太大区别。实际上调用了相同的方法,只是上述检查有所不同。
  • 所以我们可以说get方法更快,因为她不需要block try catch。
  • 你永远不会注意到性能差异,因为它会被代码中的其他特性所淹没:糟糕的架构、缺少索引、低效的对象模型等。不要担心纳米优化像这样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2016-01-27
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多