Querydsl本机jpa查询返回实体,而不是对象数组

问题描述 投票:0回答:1

我在当前项目中使用QueryDSL,并且由于jpql的限制,在一种情况下,我需要使用本机查询而不是jpa。

非常感谢,通过从JPAQuery切换到JPASQLQuery可以很容易地从一个交换到另一个,并保留api抽象层,但是在我这样做之后,jpa实体不再映射为结果类型。

示例:

使用JPAQuery

QPriceModel pm = QPriceModel.priceModel;

List<PriceModel> fetch = new JPAQuery<PriceModel>(entityManager)
    .select(pm)
    .from(pm)
    .fetch();

将产生适当的实体作为结果类型:

enter image description here

但是JPASQLQuery

QPriceModel pm = QPriceModel.priceModel;

List<PriceModel> fetch = new JPASQLQuery<PriceModel>(entityManager, new OracleTemplates())
    .select(pm)
    .from(pm)
    .fetch();

将仅按原样返回列数组

results

是否有任何方法可以强制JPASQLQuery返回实体而无需手动映射它们?

我正在使用QUERY_DSL_VERSION = 4.2.1


TLDR

JPAQuery切换到JPASQLQuery后,查询dsl不再映射jpa实体>

我在当前项目中使用QueryDSL,由于jpql的限制,在一种情况下,我需要使用本机查询而不是jpa。幸运的是,从一个交换到另一个很容易,并且保持...

java jpa orm spring-data-jpa querydsl
1个回答
0
投票

因此,似乎JPASQLQuery默认不使用DefaultQueryHandler,这是将类型解析器传递给entityManager所必需的,如此处所示https://github.com/querydsl/querydsl/blob/QUERYDSL_4_2_1/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java#L105-L113

© www.soinside.com 2019 - 2024. All rights reserved.