我在当前项目中使用 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
查询dsl从JPAQuery
切换到JPASQLQuery
后不再映射jpa实体