【发布时间】:2023-03-07 15:14:01
【问题描述】:
我在当前项目中使用 QueryDSL,在一种情况下,由于 jpql 的限制,我需要使用原生查询而不是 jpa 之一。
值得庆幸的是,只需从JPAQuery 切换到JPASQLQuery,就可以很容易地从一个交换到另一个并保留 api 抽象层,但是在我这样做之后,jpa 实体不再映射为结果类型。
示例:
使用JPAQuery:
QPriceModel pm = QPriceModel.priceModel;
List<PriceModel> fetch = new JPAQuery<PriceModel>(entityManager)
.select(pm)
.from(pm)
.fetch();
将生成适当的实体作为结果类型:
但是JPASQLQuery
QPriceModel pm = QPriceModel.priceModel;
List<PriceModel> fetch = new JPASQLQuery<PriceModel>(entityManager, new OracleTemplates())
.select(pm)
.from(pm)
.fetch();
将仅按原样返回列数组
有没有办法强制JPASQLQuery返回实体而不手动映射它们?
我正在使用 QUERY_DSL_VERSION=4.2.1
TLDR
从JPAQuery 切换到JPASQLQuery 后,Query dsl 不再映射 jpa 实体
【问题讨论】:
标签: java jpa orm spring-data-jpa querydsl