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

查询DSL和JPA中不相关表的左联接

洪开济
2023-03-14

我有两个不相关的表,每一个都有字段email。我需要一个查询,它引入从第二个表的列,如果电子邮件匹配或将是空的,如果没有找到匹配。在SQL中,这很容易:

SELECT tableA.id, tableA.email, tableB.name
 FROM tableA
 LEFT JOIN tableB ON tableA.email=tableB.email
 ORDER BY tableB.name
SELECT tableA.id, tableA.email,
       (SELECT tableB.name FROM tableB WHERE tableB.email=tableA.email) AS aname
  FROM tableA
  ORDER BY aname 

现在,它作为JPA查询工作,但我们使用的是查询DSL,因此我们开始转换它:

JPQLQuery query = new JPAQuery(em);
List<Dto> items=query.from(qTableA)
  .list(new QDto(qTableA.id, qTableA.email,
                 new JPASubQuery().from(qTableB)
                  .where(qTableB.email.eq(qTableA.email)).unique(qTableB.name)))

它工作,但现在我不知道如何实现排序和筛选的字段引入子查询。

DTO是用于收集结果的POJO;QDTO是从DTO自动生成的类。

问题是:如何使用查询DSL和JPA并避免本机SQL连接两个不相关的表?有可能吗?对tableA和TableB.Name中的字段进行排序和筛选是必需的。

共有1个答案

危飞跃
2023-03-14

最新的JPA规范(2.1)不包括在无关实体上的连接

但是,Hibernate5.1.0+和Eclipselink2.4.0+支持即席连接。http://blog.anthavio.net/2016/03/join-unrelated-entities-in-jpa.html

 类似资料:
  • 我有两个表,一个用于聚会,一个用于记分卡模板映射。记分卡模板映射表有一个返回到party(on id)的外键。我想找到一个有记分卡模板映射细节的所有各方的列表。

  • 有可能在QueryDSL中执行以下查询吗? 库存余额存储每个零件号/月/年的库存数据;我只需要当前年份和月份的数据。 我已经得到了基本的左连接: 这就产生了正确的sql,但只是在零件号上连接。 检查生成的零件的库存可用性(除其他外)。左连接是必要的,因为我仍然需要没有库存条目的部件(例如新部件)。Left join将获取没有匹配库存余额的行,但在查询的where子句中添加等将删除没有库存余额的行号

  • 我正在开发一个人力资源管理应用程序,所以我对如何通过JPA管理实体感到困惑。 我的情况是一组多语言上下文中的表:-employees-departments-languages-departments_languages 在我的数据库表之后: 从这个查询中,我需要员工信息,以及部门名称(假设languageId为1) 从eclipse JPA控制台执行查询将返回一个Employee对象,该对象具有

  • 我正在尝试使用JPA查询使用以下查询从DB中获取数据: 其中,id=candidate_id(主表的主键)。 该查询也从其所有关联表中获取数据,而我的要求是仅从其2个关联表中获取数据。因为第三个表包含大量JSON数据,这会降低上述查询的响应时间。 我尝试使用JOIN,获取父级的JOIN及其2个关联表,但它不起作用。我还在研究如何在获取候选数据时只跳过一列数据(带有大量JSON的第3个表的列),但运

  • 我有下面的查询,我正试图将其转换为Laravel的查询生成器,以便利用自动转义等功能。 实际上,查询所说的是“获取所有主题的名称,如果它们有匹配的report_comment(通过中间的表),将其与主题一起返回”(对于给定的条件,主题有一个或零report_comments)...如果我直接在MySQL中运行查询并返回我期望的结果,查询就可以工作。目前是硬编码的,但最终将成为占位符,以便可以传入任

  • 那么如何将此更改为jpql查询代码呢?谢谢