当前位置: 首页 > 知识库问答 >
问题:

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

殷宾白
2023-03-14

我在当前项目中使用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的Im

TLDR

JPAQuery切换到JPASQLQuery后,Query dsl不再映射jpa实体

共有1个答案

翟承志
2023-03-14

因此,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所示

我的解决方案是将DefaultQueryHandler传递给JPASQLQuery的构造函数


        Configuration configuration = new Configuration(new OracleTemplates());

        new JPASQLQuery<>(entityManager, configuration,  DefaultQueryHandler.DEFAULT);

这将从select语句生成一个解析的实体

 类似资料:
  • 本文向大家介绍MyBatis-Plus 查询返回实体对象还是map,包括了MyBatis-Plus 查询返回实体对象还是map的使用技巧和注意事项,需要的朋友参考一下 在常见场景下:返回数据建议使用map,不建议使用实体对象 遇到了这个问题,迷惘,遂问大神,大神曰:如果是组合体,就用map;如果是单体实体,就用实体。实体类对应单表,多表返回用map。 我想省事全用map,但是那我学了面向对象是用来

  • 我的问题与这条线有关。 下面是我使用group by some Field的存储库方法: 该系统工作正常,结果如下: 我尝试了以下返回类型;但每件事都返回同样的错误。希望有人能帮助我,谢谢你。

  • 问题内容: 我在我的项目中使用spring data JPA。我正在玩数百万条唱片。我有一个要求,我必须获取各种表的数据并构建一个对象,然后将其绘制在UI上。现在如何实现我的Spring数据存储库。我读过它可以通过命名本机查询来实现。 如果命名的本机查询未返回实体或实体列表,则可以使用@SqlResultSetMapping批注将查询结果映射到正确的返回类型。 但是,当我尝试使用它时,将采用另一个

  • 我正在我的项目中使用Spring Data JPA。我在玩数百万张唱片。我有一个要求,我必须为各种表获取数据,构建一个对象,然后在UI上绘制它。现在如何实现我的spring数据仓库。我读过,它可以通过命名的本机查询来实现。 如果命名的本机查询没有返回实体或实体列表,我们可以使用@SqlResultSetMapping注释将查询结果映射到正确的返回类型。 但是当我试图使用时,它会使用另一个Entit

  • 问题内容: 我正在写一个跨三个表的JPQL查询。在我的结果列表中,我想获得每个匹配行的所有三个实体(希望如此)。 有任何想法吗? Hibernate 3.x是我的JPA提供程序。 问题答案: IIRC,您可以执行,结果将是,其中数组内容将包含o1,o2,o3值。

  • 此外,该实体需要一个id,我希望让jpa自动生成它,但我得到的是“Invalid Parameter:Unknown column name id.errorcode=-4460,sqlstate=null” 我的结果集包含4个相同的记录,而不是4个不同的记录,我认为这与我的id字段设置不正确有关 如果你能在这方面提供帮助,我将不胜感激,谢谢。