当前位置: 首页 > 知识库问答 >
问题:

使用自定义查询的嵌套JPA投影

仲孙兴旺
2023-03-14

我是Spring Data投影的新手,我正在尝试在一个新项目中使用此功能。

特别是,我想在与复杂查询关联的回购方法上使用投影。

我用@Query注释注释了我的方法,并声明了一个JPA查询,其中包含几个连接的表/实体和一个复杂的where条件。

在本文中,我了解到可以使用基于接口的投影和基于类的投影,但只有第一个支持嵌套投影。

我需要嵌套投影,但似乎只有使用基于接口的投影才支持此功能,并且这种方法仅适用于自动生成的查询方法,而不使用显式JPA查询。是这样吗?

有没有办法使用自定义JPA查询使用基于接口的投影?

共有2个答案

翟奇逸
2023-03-14

您可以使用Hibernate ResultTransformer。VladMihalcea的这篇文章提供了一个如何自定义结果集映射的示例。

谢锦程
2023-03-14

可以将界面投影用于自定义查询。如果这是接口:

public interface MyView {

  int getCount();
  String getName();
}

然后可以进行如下查询:

@Repository
public interface MyRepository extends JpaRepository<Entity, Long> {

  @Query("SELECT e.some_count AS count, e.name FROM Entity AS e WHERE e.id IN :ids")
  List<MyView> findViews(List<Long> ids);
}

接口投影适用于自定义查询,无论是JPA还是本机查询。只有列名必须匹配方法名,例如。我还没有使用嵌套投影,但我看不出它们不起作用的原因。

还发现了有关嵌套投影的问题,这应该会有所帮助。

 类似资料:
  • 我需要有一个自定义查询的spring数据仓库方法,并希望使用基于类的投影。 看这个https://docs . spring . io/spring-data/JPA/docs/current/reference/html/# projections findDistinct运行良好。 findDistinctQuery和FindDitinctNativeQuery抛出 找不到能够从类型[org.

  • 我有两个表,用户和角色,它们是多对多的 我正在使用EntityManager进行查询。 我如何使JPA知道映射一个用户和多个角色?

  • 我想使用@Query批注从具有@OneTo许多关系的实体创建左连接查询。 母公司是: 孩子: 对于DAO,我确实喜欢以下内容: 显然,它是错误的,因为生成的查询是: 选择payment1。uuid为uuid1_9_,付款1_。注册时内部加入付款1的注册金额。uuid=payment1_uid。uuid在哪里注册。效果=? 在生成关系表时: 对我来说,正确的查询应该是这样的: 选择p.*从注册r加入

  • 我在这里创建了一个类似于教程的Web应用程序:https://spring.io/guides/tutorials/react-and-spring-data-rest/ . 我已经添加了后gresql数据库,一切正常。我有一个基本查询查找我的存储库中的By用户名(字符串名称),工作正常。我的问题是,由于某种原因我无法创建自定义查询,例如 . 假设我做了一个测试,我只想得到这个语句的值。我说的不能

  • 问题内容: 我正在使用Spring Data JPA进行项目。我在数据库中有一个表作为my_query。 我想创建一个将字符串作为参数的方法,然后将其作为数据库中的查询执行。 方法: 例如,当我通过 那么它应该在数据库级别运行该查询。 存储库类如下。 但是,它没有按我预期的那样工作。它给出以下错误。 还有什么其他方法可以实现这个目标。提前致谢 问题答案: 您可以参数化的唯一部分是在子句中使用的值。