在没有 JQL/HQL 的 Spring JPA 中返回实体 A 和实体 B 的连接并存储在实体 C 中

Posted

技术标签:

【中文标题】在没有 JQL/HQL 的 Spring JPA 中返回实体 A 和实体 B 的连接并存储在实体 C 中【英文标题】:Returning a Join of Entity A and Entity B and store in Entity C in Spring JPA without JQL/HQL 【发布时间】:2018-03-09 06:45:19 【问题描述】:

我有以下实体:

@Entity
public class Employee 
       @Column
       private String employeeName;

       @Column
       private Integer employeeId;

       @OnetoMany
       private Set<Account> accounts;


@Entity
public class Account 
       @Column
       private String bankName;

       @Column
       private Integer accountNumber; 



public class EmployeeAccountRecords 
       private String employeeName;
       private Integer accountNumber;

我想获取 Employee 和 Account 连接的分页结果,并将值存储在 EmployeeAccountRecords 类的对象中。此外,我还想将排序/过滤器传递给实现此功能的存储库。

这是否可以在不使用 JPQL/HQL 编写查询的情况下完成,可能正在使用 JPA 规范等,任何其他组件?

我正在使用带有 Hibernate 的 Spring Data JPA。

谢谢。

PS:结果对象仅使用连接值中结果集的子集。

【问题讨论】:

【参考方案1】:

不使用 JPQL/HQL,我看到的另外两个选项是 Spring Data JPA Specifications 和 QueryDsl。

根据链接 Support projections on query methods that take a dynamic query type Specification or Querydsl Predicate 和 Add support for QueryDSL projections in JPA repositories 他们还不支持投影。

但他们确实有链接显示如何在 querydsl http://***.com/questions/18300465/spring-data-and-querydsl-to-fetch-subset-of-columns-using-bean-constructor-proje 中扩展存储库并支持这些功能,另一个是 specification-with-projection,可能会有所帮助。

【讨论】:

以上是关于在没有 JQL/HQL 的 Spring JPA 中返回实体 A 和实体 B 的连接并存储在实体 C 中的主要内容,如果未能解决你的问题,请参考以下文章

在没有 Spring Boot 应用程序的情况下使用 Spring Data JPA

没有 Spring Boot 的 Spring Data JPA

带有没有外键的数据库的 Spring JPA

Spring Boot中的JPA @query中没有传递参数[重复]

Spring JPA 没有正在进行的事务

为啥在将 Spring Data JPA 与 Spring Boot 结合使用时,我的数据库自定义没有得到应用?