【问题标题】:Hibernate findById or sql query休眠 findById 或 sql 查询
【发布时间】:2013-11-05 10:34:49
【问题描述】:

我有很多时间场景,我只想访问一个/两个/或一些列,我们正在使用休眠,所以我想知道哪个对性能更好

1)通过获取hibernate的findById方法,这对我来说非常方便,因为我必须调用它,但我认为它的性能不好,因为它会获取所有列而不是我只需要一些。

2) 或者每次都创建我的查询,这很乏味,但性能会更好

所以我想要关于我应该使用什么的建议?

【问题讨论】:

    标签: sql sql-server hibernate


    【解决方案1】:

    为了更具体地回答,如果您包含代码 sn-p 将会很有帮助。但总的来说,findById 是一种方便的方法,它会产生与您自己编写的查询非常相似的查询。因此,自己编写查询并仅返回您需要的列(构造函数表达式很有用)在性能方面会更好。我要问的问题是,提高性能是否值得更复杂的代码?您可以随时优化查询。

    【讨论】:

    • 我仍然不能 100% 确定您指的是哪个 findById 方法,但是是的,像 findById 这样的方法会返回整个实体,其中包括该实体的所有字段。如果实体有其他实体作为字段(并且它们不是延迟加载的),其他实体也会被加载。
    【解决方案2】:

    这完全取决于正在加载的实体。如果实体是一个,有很多关系,并且您只需要根实体中的几个字段,那么绝对值得编写您自己的查询,因为 Hibernate 使用 JOINs 生成查询来加载实体,这可能非常昂贵的。这里要考虑的另一件事是,您始终可以使用 LAZY 或 EAGER 加载处理正在加载的字段,但这些设置是静态的,将永久应用于您的实体。
    另一方面,如果实体没有很多关系,我认为最昂贵的部分是数据库和应用程序之间的对话时间,因此可以忽略加载一些额外的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多