使用jpa api标准加入不相关的实体
两个数据库表具有外键关系。
它们通过JPA映射到两个实体A和B ,但是连接列是从实体中手动删除的,因此在JPA世界中,类A和B不相关,您无法通过字段/属性从一个导航到另一个。
使用标准api是否可以创建一个连接两个表的查询?
我在互联网上找到的所有例子都使用连接列来实现目标,但是,如上所述,它已从代码中删除,因为大部分时间我对A和B之间的关系不感兴趣而且我担心可能的开销。
第一:外键关系不仅适用于导航。 它们主要用于确保在关系中不引入虚假值。 它们还可以帮助数据库进行查询优化。 我建议你重新考虑一下。
无论如何,对于创建使用多个不相关实体的查询,您需要将它们作为( 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