使用jpa api标准加入不相关的实体

两个数据库表具有外键关系。

它们通过JPA映射到两个实体AB ,但是连接列是从实体中手动删除的,因此在JPA世界中,类AB不相关,您无法通过字段/属性从一个导航到另一个。

使用标准api是否可以创建一个连接两个表的查询?

我在互联网上找到的所有例子都使用连接列来实现目标,但是,如上所述,它已从代码中删除,因为大部分时间我对AB之间的关系不感兴趣而且我担心可能的开销。

第一:外键关系不仅适用于导航。 它们主要用于确保在关系中不引入虚假值。 它们还可以帮助数据库进行查询优化。 我建议你重新考虑一下。

无论如何,对于创建使用多个不相关实体的查询,您需要将它们作为( root )实体放置(就像在SQL或JPQL中那样)

 SELECT .... FROM Link l, Training t WHERE l.attribute = t.attribute; Root rootLink = criteriaQuery.from(Link.class); Root rootTraining = criteriaQuery.from(Training.class); ... criteriaQuery.where( criteriaBuilder.equal(rootLink.get(link_.linkAttribute), trainingLink)); 

加入不相关的实体不属于最新的JPA规范(2.1)

但是,Hibernate 5.1.0+和EclipseLink 2.4.0+支持ad hoc连接。 http://blog.anthavio.net/2016/03/join-unrelated-entities-in-jpa.html

另一种可能性是本机查询http://www.oracle.com/technetwork/articles/vasiliev-jpql-087123.html