ORM的好处是我可以将数据库表映射到Java对象。如果我使用HQL编写自定义语句那么重点是什么?我也可以编写正常的SQL查询并使用ResultSets?
答案 0 :(得分:1)
好吧,主要是因为有时使用其他替代方法编写查询是不可能的(或非常困难)。然后你需要回退到HQL替代方案。
HQL有缺点,你用它写字符串的事实。所以强烈推荐其他策略。 但是,有时候,这是实现它的最快方式。
我还想请你阅读这篇文章,这篇文章已经广泛讨论过HQL:JPA and Hibernate - Criteria vs. JPQL or HQL
答案 1 :(得分:0)
HQL是唯一可以解决hibernate中剩余的一点点性能的方法。
如果你有一个包含很多行的大表,你需要的只是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();