gpt4 book ai didi

java - 将具有多列选择的 @Query 映射到 @Repository 中的 Java 对象 - 是否可以开箱即用?

转载 作者:行者123 更新时间:2023-12-01 19:27:49 25 4
gpt4 key购买 nike

是否可以映射 Hibernate 的结果 @Query像这样(在 @Repository 扩展 @JpaRepository 的接口(interface)中):

@Query("select u.id, u.email, u.status from user u")
public SimpleUserDTO getAllUsersSimpleData();

直接到 Java 对象,如下所示:

public class SimpleUserDTO {
private Long id;
private String email;
private String status;
}

我所知道的是,做这样的事情:

Query query = session.createQuery("select u.id, u.email, u.status from user u");

结果可以提取到List<Object[]> :

List<Object[]> users = (List<Object[]>) query.list();

但是是否可以将其直接映射到 List<SimpleUserDTO>无需编写将值映射到 SimpleUserDTO 的附加方法?

最佳答案

您有两个选择。

选项 1:构造函数表达式:

@Query("select new <insert_package_here>.SimpleUserDTO(u.id, u.email, u.status) from user u")
public List<SimpleUserDTO> getAllUsersSimpleData();

选项 2:使用界面投影

将你的DTO变成一个接口(interface),你可以在没有@Query注解的情况下使用它

public List<SimpleUserDTO> getAllUsersSimpleData();

请在文档中了解有关投影和 Spring Data JPA 的更多信息:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

关于java - 将具有多列选择的 @Query 映射到 @Repository 中的 Java 对象 - 是否可以开箱即用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60965294/

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