【问题标题】:How to retrieve data and count of data at same time in hql?如何在hql中同时检索数据和数据计数?
【发布时间】:2018-09-02 01:22:25
【问题描述】:

我只想在一个查询中检索我想在 JPA 存储库上写入的数据的计数和列表。我使用构造函数编写它并使用实体管理器执行它,但它不起作用。它给了我一个 QuerySyntaxException。这是我的查询:

String hql = "select new core.abc(select count(*) from abc as m  where m.Id in :Ids and m.Type  = :Type,"
                + "select max(m.modificationTime) from abc as m  where m.Id in :Ids and m.Type  = :Type )";

如何在 JPA 存储库中编写此类查询?

【问题讨论】:

  • 在您拥有的数据库上运行此查询,它包含无效的语法,首先,更正查询,然后在此处发布。

标签: java spring hibernate spring-data-jpa jpql


【解决方案1】:

我只是弄清楚您的用例场景是您想要从表中获取所有记录以及记录总数和特定列的最大值,您将该列命名为 modifyTime。所以在这种情况下会发生一些事情,如果你想用单个查询引入表,那么你将得到名为 max 和 count 的列的无用数据。

为 JPA 试试这个,

@Query(value="SELECT cb from abc cd where cd.Id in (?1) and cd.Type=?2 , (SELECT MAX(m.modificationTime) as maxModificationTime  , COUNT(*) as count FROM abc m where m.Id in (?3) and m.Type=?4) as m",nativeQuery=true)

【讨论】:

  • 谢谢 ritesh。但是如果我使用这个查询,存储库方法的返回类型应该是什么。我需要在我的实体 abc 中创建构造函数吗?
  • 另外,我不能使用本机查询。我只需要使用 hql。
  • @chitwan 您必须在名为 maxModificationTime 和 count 的实体中添加两个瞬态变量,它们的数据类型将分别与 modifyTime 变量和 int 相同,并编写更新您的构造函数并使 List 方法的返回类型。
  • 但这是原生查询@ritesh,我需要使用 HQL 或 JPQL。
猜你喜欢
  • 2018-09-20
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
相关资源
最近更新 更多