当前位置: 首页 > 面试题库 >

如何仅检索JPQL或HQL中实体的某些字段?JPQL或HQL中的ResultSet等效于什么?

张溪叠
2023-03-14
问题内容

在JPQL中,我可以通过以下方式检索实体:

query = entityManager.createQuery("select c from Category c");
List<Category> categories = query.getResultList();

但是,如果我想检索Category实体的id和name字段(仅),则需要像ResultSet对象这样的东西,通过它我可以说:rs.getString("name")rs.getString("id")。如何在JPQL不检索整个实体的情况下做到这一点?

基本上,对于如何检索像查询的信息:select c.id,c.name from Category c


问题答案:

在HQL中,可以使用list()函数获取包含结果行的Object []数组的列表:

Query query = session.createQuery("select c.id,c.name from Category c");
List<Object[]> rows = query.list();

返回数组中的第一个元素将是id,第二个-名称。

for (Object[] row: rows) {
    System.out.println(" ------------------- ");
    System.out.println("id: " + row[0]);
    System.out.println("name: " + row[1]);
}

如果要使用hibernate的Criteria
API,则应使用Projections。

使用JPA,它将以相同的方式工作:

List<Object[]> rows = entityManager.createQuery(queryString).getResultList();


 类似资料:
  • 问题内容: 在Hibernate 3中,有没有办法等效于以下HQL中的MySQL限制? 如果可能,我不想使用setMaxResults。这肯定在较旧的Hibernate / HQL版本中是可行的,但似乎已经消失了。 问题答案: 几年前,当有人问到为什么它在Hibernate 2中有效但在Hibernate 3中无效时,此消息发布在Hibernate论坛上: 在HQL中, 从不 支持Limit 子句

  • 问题内容: 使用Criteria或HQL有什么利弊?Criteria API是在Hibernate中表达查询的一种很好的面向对象的方式,但是有时候Criteria Queries比HQL更难以理解/构建。 您何时使用标准以及何时使用HQL?在哪种用例中,您更喜欢什么?还是只是口味问题? 问题答案: 我最喜欢动态查询的条件查询。例如,动态添加一些订购或根据某些参数省去某些零件(例如限制)要容易得多。

  • 我有以下实体: 我有以下HQL查询,其中我选择了CityExpert的子集: 但是,由于CityExpert中的字段太多,我不想选择所有字段。因此,我将查询更改如下: 然而,显然,我们无法在这样的实体中选择一对多字段,因为我在前面的查询中得到了一个MySQLSyntaxErrorException(参考这个问题)。因此,我将查询更改为: 但是,这次结果变成了

  • 我是SpringWebFlux反应型新手。我使用R2DBC postgresql。我有这样一个存储库: 现在我想通过许多复杂的条件为查询添加自定义方法: 我的实施: 我的问题在上面的代码中: 如何获得EntityManager? 如何从我构建的HQL查询中获取Flux? 当我问这些问题时,我的意思是“如何用Spring反应式/r2dbc方式实现”,而不是“如何用JDBC实现这种常规方式”

  • 我是JPA/JPQL的新手,所以如果这个问题不是很清楚,请原谅。 我正在使用以下JPQL查询: 查询在无状态会话上运行,以便获得DB中当前数据的事实上的快照,该快照与实体管理器分离(因此使用了left join fetch)。 不幸的是,我遇到了两个问题: 在尝试微调性能时,使用本机查询似乎并没有比使用JPQL查询更好的性能。使用本机查询也会产生对象类型的结果,这需要后期处理。