首页 > 解决方案 > Criteria Builder JOIN 在未引用的表上

问题描述

CriteriaBuilder是否可以在所选实体未引用的表上执行连接?由于CriteriaBuilder.join()期望属性名称作为参数,因此它似乎不起作用。

为了更清楚一点,原始查询如下所示: select Vehicle v left join VehicleStatus vs on v.id = vs.vehicleId...

Vehicle没有定义与 的关系VehicleStatus。并且如果需要的话,对数据库的更改目前是不希望的。

目前我的代码

final Join<Vehicle, VehicleStatus> vs = vehicle.join("vs", JoinType.LEFT);
vs.on(cb.equal(vs.get("vehicleId"), vehicle.get("id")));

失败了java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [vs] on this ManagedType

标签: javajpajoin

解决方案


不,您需要一个映射关联来创建一个带有CriteriaBuilder.

使用 Hibernate,您可以在 JPQL 查询中加入 2 个未关联的实体。语法几乎与 SQL 相同。但它是 Hibernate 特有的功能,而不是 JPA 标准的一部分。


推荐阅读