【问题标题】:What are the benefits of HQL? [closed]HQL有什么好处? [关闭]
【发布时间】:2014-02-24 10:29:56
【问题描述】:

ORM 的好处是我可以将数据库表映射到 Java 对象。如果我使用 HQL 编写自定义语句,那有什么意义呢?我还不如编写普通的 SQL 查询并使用 ResultSets?

【问题讨论】:

  • SQL 检索行。 HQL 检索实体/对象,为您完成所有工作。
  • 如果我编写自己的 HQL 并检索作为计算结果的列:table.a column.a - table.b column.b 那么我有一个无法映射的列,因为它是自定义结果?
  • 根据操作结果,Hibernate 会将其映射到某个Object 子类型,可能是IntegerLong
  • 哪个相当于resultSet.getInteger(...)对吧?
  • 类似的东西。我不知道 Hibernate 使用的内部实现。您始终可以使用本机查询

标签: java hibernate orm hql resultset


【解决方案1】:

嗯,基本上是因为有时不可能(或很难)使用其他替代方法编写查询。然后,您需要回退到 HQL 替代方案。

HQL 的缺点是您可以使用它编写字符串。所以强烈推荐其他策略。 但是,有时,这是实现它的最快方式。

我还建议您阅读这篇已广泛讨论 HQL 的帖子:JPA and Hibernate - Criteria vs. JPQL or HQL

【讨论】:

    【解决方案2】:

    HQL 是摆脱休眠状态的唯一选择。

    如果您有一个包含许多行的大表,而您只需要 id 和描述,那么您最好使用 hql。 您可以在两列信息中填写一个 pojo,如果您使用的是 hibernate 4,那么您也有某种类型的安全性。

    查询:

    final TypedQuery<Pojo> query = em.createQuery(new StringBuilder()
    .append("SELECT new ").append(Pojo.class.getName())
    .append("(tbl.id, tbl.desc) FROM ")
    .append(BigTable.class.getName()).append(" tbl ")
    .append("WHERE tbl.id between :start and :end ")
    .toString(),
    Pojo.class
    );
    
    List<Pojo> list = query.getResultList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2012-06-05
      • 2011-04-26
      • 2011-01-03
      • 1970-01-01
      • 2013-08-16
      • 2015-03-24
      相关资源
      最近更新 更多