gpt4 book ai didi

java - JPA 将 native 查询结果映射到非实体 DTO

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:45:19 24 4
gpt4 key购买 nike

我有一个复杂的 native 查询,我试图将其结果映射到非实体 DTO 类。我正在尝试将 JPASqlResultSetMappingConstructorResult

一起使用

我的 DTO 类

@Data
public class Dto {

private Long id;

private String serial;

private Long entry;

private int numOfTasks;
}

我的实体类,它具有我将称之为 native 查询结果的存储库接口(interface)。

@SqlResultSetMapping(
name = "itemDetailsMapping",
classes = {
@ConstructorResult(
targetClass = Dto.class,
columns = {
@ColumnResult(name = "ID"),
@ColumnResult(name = "SERIAL"),
@ColumnResult(name = "ENTRY"),
@ColumnResult(name = "TASKS")
}
)
}
)

@NamedNativeQuery(name = "getItemDetails", query = "complex query is here", resultSetMapping = "itemDetailsMapping")
@Entity
@Data
public class Item {}

存储库

@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {

...

List<Dto> getItemDetails();

}

当我从 ItemRepository 调用 getItemDetails() 时,出现以下错误:

org.springframework.data.mapping.PropertyReferenceException: No property itemDetails found for type Item

使用 SqlResultSetMappingConstructorResult 的正确方法是什么并解决这个问题。

如有任何帮助,我们将不胜感激。

最佳答案

要使用命名查询,命名查询的名称必须以实体名称作为前缀:

@NamedNativeQuery(name = "Item.getItemDetails", 
query = "complex query is here", resultSetMapping = "itemDetailsMapping")

那么接口(interface)方法必须与命名查询同名,不带前缀:

List<Dto> getItemDetails();

-

在引用文档中阅读有关 Spring Data JPA 和命名查询的更多信息 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.named-queries

关于java - JPA 将 native 查询结果映射到非实体 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54979733/

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