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

带LeftJoin的SpringData可分页投影与JPA2.1

闾丘博超
2023-03-14

我有一个2.1.4版本的项目,带有spring boot数据。

该项目具有以下关系实体:ApplicationEntity ApplicationTranslateEntity LanguageEntity它在数据库中有一个区域设置关系表(ManyToMany),该表中有一个用于不同语言的文本的额外表(ApplicationTranslateEntity)。

    @Getter
    @Setter
    public class ApplicationEntity {

    @Id
    private Long id;

    private String urlImage;
    private String urlStoreiOS;
    private String urlStoreAndroid;

    @OneToMany(mappedBy = "application")
    Set<ApplicationTranslationEntity> applicationTranslationEntities;

}
@Getter
@Setter
public class ApplicationTranslationEntity {
    @EmbeddedId
    ApplicationTranslationKey id;

    @ManyToOne
    @MapsId("application_id")
    @JoinColumn(name = "application_id")
    ApplicationEntity application;

    @ManyToOne
    @MapsId("language_id")
    @JoinColumn(name = "language_id")
    LanguageEntity language;

    @Column(length = 100)
    private String name;

    @Column(length = 1000)
    private String description;

}
public interface ApplicationProjection {

    Long  getId();
    String getName();
    String getDescription();
    String getUrlImage();
    String getUrlStoreiOS();
    String getUrlStoreAndroid();
}
 @Query("select  a.id as id, a.urlImage as urlImage, at.name as name, at.description as description  from ApplicationEntity a left join a.applicationTranslationEntities at on at.language.key = :language")
Page<ApplicationProjection> findAllByLanguage(Pageable pageable, Language language);
 @GetMapping()
Page<ApplicationDto> all(Pageable pageable, @RequestHeader(value= headerAcceptEncoding, required = false) Language language){
    return applicationService.findAll(pageable,language);
}

org.hibernate.QueryException:无法解析属性:名称:******Entity.ApplicationEntity[选择a.id作为id,a.urlImage作为urlStoreiOS,a.urlStoreAndroid作为urlStoreAndroid,a.name作为名称,a.description作为描述从********.Entity.ApplicationEntity左联接a.applicationtranslationEntitya.at.language.key=:语言顺序由a.id asc,a.name asc];嵌套异常为java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:名称:********.Entity.ApplicationEntity[选择a.id作为id,a.urlImage作为urlStoreiOS,a.urlStoreAndroid作为urlStoreAndroid,a.name作为名称,a.description作为描述从**********.Entity.ApplicationEntity左联接a.applicationtranslationEntity.at.language.key=:语言顺序由a.id asc,a.name asc]

共有1个答案

方楷
2023-03-14

您正在使用name的分页属性,而它应该是applicationtranslationentities.name(属性路径)或a.name(根据连接路径)。

 类似资料:
  • 我对Angular project和TypeScript的语法有一个问题,我做了一个新的空Angular project,但PhpStorm(2019.2.1)不识别TypeScript语法。

  • 我想优化一个queryDSL+Spring数据查询。目前我使用BooleanBuilder作为谓词,这很好,但是它连接了太多的表。我不需要表中的所有列,也不需要某些表。我相信使用投影会减少加入的表的数量。 那么,如何使QueryDSL连接表而不是从所有表中进行选择呢?我尝试优化查询是否正确?投影有意义吗?

  • 我有一个使用投影的查询,只要返回类型是,它就可以正常工作,但添加分页后它就停止工作了。 以下是工作代码: 我需要扩展它添加分页,所以我将其更改为: 我添加的查询过于简化,我的实际查询实际上从不同的表中收集不同的值,如果没有投影,我无法实现它 我使用的是Spring Boot 1.5.8。发布

  • MongoDB 中的投影即查询指定的字段,而不是直接查询文档的全部字段。比如说某个文档中有 5 个字段,而我们只需要其中的 3 个字段,那么就可以使用 MongoDB 中的投影来指定需要查询的 3 个字段。 在《 MongoDB查询文档》一节中我们介绍的 find() 方法,在使用 find() 方法时,如果不设置其中的第二个参数,那么在查询时将返回文档中的所有字段,想要限制要查询的字段,您就需要

  • 我正在使用JPA投影,但当我的查询包含子查询时,它就失败了。例如: 下面是投影的界面: 和存储库: 关于如何使用JPA投影的子查询有什么想法吗? 谢谢。

  • 问题内容: 我正在尝试使用spring数据,投影的新功能来获取部分实体(NetworkSimple)的页面 我已经检查了文档,如果仅要求: 它可以工作,但是如果我使用的是可分页: 它抛出一个错误: 有人已经为此工作了吗? 我的NetworkSimple类如下: 问题答案: 注意: 此功能应按照原始海报所描述的方式工作,但由于此错误而未能实现。该错误已针对Hopper SR2版本进行了修复,如果您停