【问题标题】:Hibernate noob - retrieve partial objectHibernate noob - 检索部分对象
【发布时间】:2011-01-27 13:17:53
【问题描述】:

您好!

我有以下课程,有时只需要检索标题和子标题元素:

public class Article implements Serializable {

    private static final long serialVersionUID;
    private int id;
    private String title;
    private String subTitle;
    private String body;
    ....
}

促进这一点的最佳方法是什么?我想过让 title 和 subTitle 成为独立的对象,但老实说我还不知道我在做什么。

我有幸改变文章的整个组成,但首先问对我来说是目前最明智的事情。

提前致谢。

【问题讨论】:

  • 您是否有特定的原因要这样做?为什么 Hibernate 加载额外的字段很重要?您不需要使用它们。
  • ...老实说,当我只需要几位时加载所有内容似乎非常违反直觉。实际上,我可以加载整个东西,但我正在考虑性能和规模,至少在理论上是这样。
  • 不返回这些字段不会影响性能。担心应用程序的功能,而不是让 0.001 秒的查询运行速度快 0.000000000001 秒。
  • ...嗯,过早优化?!?
  • ...菲尔,如果您发表评论作为答案,我至少会投票赞成或接受。

标签: nhibernate


【解决方案1】:

您可以使用 LAZY 注释每个简单的属性 -> 就像这样 @Basic(fetch = FetchType.LAZY)

所以,它只会在你需要时加载

【讨论】:

  • 这是 Java 版本,尽管这个概念仍然适用(映射中的lazy="true"
【解决方案2】:

如果这是出于显示目的,您也可以依赖 ResultTransformer。

请参阅此SO answer,它处理类似问题并限制检索到的属性。

【讨论】:

    【解决方案3】:

    我认为你可以通过创建一个特定的类来保存你想要的信息来解决这个问题,然后你将它导入到你的映射中。请参阅手册中的5.1.19.import。我相信您可以在 HQL 中使用导入的类,如下所示:

    "select new Titles(a.title, a.subTitle) from Article a where a.id = :id"
    

    这是我在这个主题上找到的一篇博文:http://gustavoringel.blogspot.com/2009/02/creating-dto-in-nhibernate-hql-using.html

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 2015-01-09
      相关资源
      最近更新 更多