gpt4 book ai didi

java - 从 native 查询返回单个投影

转载 作者:行者123 更新时间:2023-12-01 17:23:54 25 4
gpt4 key购买 nike

我试图从 native 查询返回一个投影,而不是投影列表。我不断遇到转换器错误:

org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [PersonRepository$NameProjection]

我的 spring 版本相当旧(spring-boot-starter-data-jpa v1.5.3),但由于外部原因我无法升级它。所以我只是想知道我是否可以让它与我拥有的版本一起工作。

我的存储库如下所示:

public PersonRepository extends JpaRepository<Person, Integer> {

interface NameProjection {
private String firstName;
private String lastName;
}

@Query(value = "SELECT first_name AS firstName, last_name AS lastName FROM person where person_id = :personId", nativeQuery = true)
NameProjection getPersonNameById(@Param("personId") Integer personId);

@Query(value = "SELECT first_name AS firstName, last_name AS lastName FROM person", nativeQuery = true)
List<NameProjection> getPersonNames();
}

当我调用 getPersonNameById() 时,出现上述错误。有趣的是,如果我将投影更改为只有 1 个字段(例如 firstName),该方法就会起作用。然而,只要有多个字段,我就会收到上面的转换器错误。

调用 getPersonNames() 的工作方式与我期望的完全一样,其中返回带有我指定的字段的投影列表。

如何更改我的存储库代码,以便 Spring 允许我返回单个投影?

提前谢谢您。

最佳答案

这可能是一个长期修复的错误:https://jira.spring.io/browse/DATAJPA-980或一些相关的问题,该领域已有一些问题。

如果您碰巧使用 EclipseLink,甚至仍然存在问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=525319

因此,真正的解决方法是升级您的版本。

如果正如您在问题中所描述的那样不可能,那么最好的想法可能是切换到自定义实现并使用 EntityManager 甚至只是 Jdbc Connection/JdbcTemplate直接。

关于java - 从 native 查询返回单个投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61240481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com