gpt4 book ai didi

java - createNativeQuery 映射到 POJO(非实体)

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

乍一看我有一个简单的问题:

entityManager()
.createNativeQuery("select count(*) as total, select sum(field) as total_sum ... blabla")

我想将选择结果写入 POJO,如下所示:

public class AggregateStatsDto {

private int total;

private long totalSum;

// getters, setters, cosntructors
}

实现此目标的最佳方法是什么?

我可以使用 JPA 2.1 并尝试将 @SqlResultSetMapping@ConstructorResult 结合使用:

@SqlResultSetMapping(name = "AggregateStatsResult", classes = {
@ConstructorResult(targetClass = AggregateStatsDto.class,
columns = {
@ColumnResult(name = "total"),
@ColumnResult(name = "totalSum")
})
})
public class AggregateStatsDto {

private long total;

private int totalSum;

// getters, setters, cosntructors
}

查询:

AggregateStatsDto result = (AggregateStatsDto) entityManager()
.createNativeQuery("select count(*) as total, select sum(field) as total_sum ... blabla", "AggregateStatsResult")
.getSingleResult();

但运气不好。它似乎无论如何都想要@Entity。但我只想要一个 POJO。

org.hibernate.MappingException: Unknown SqlResultSetMapping [AggregateStatsResult]"

提前致谢!

最佳答案

将您的 @SqlResultSetMapping 注释放在一个实际实体的类中,而不是 DTO 类中。当您在非实体中注释 SqlResultSetMapping 时,您的实体管理器无法发现您的映射。

@SqlResultSetMapping(name = "AggregateStatsResult", classes = {
@ConstructorResult(targetClass = AggregateStatsDto.class,
columns = {
@ColumnResult(name = "total"),
@ColumnResult(name = "totalSum")
})
})
@Entity
public class SomeOtherClassWhichIsAnEntity {

关于java - createNativeQuery 映射到 POJO(非实体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26831893/

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