java - 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
解决方案
不,您需要一个映射关联来创建一个带有CriteriaBuilder
.
使用 Hibernate,您可以在 JPQL 查询中加入 2 个未关联的实体。语法几乎与 SQL 相同。但它是 Hibernate 特有的功能,而不是 JPA 标准的一部分。
推荐阅读
- r - 如何使用 R 中的 if 语句测试整数(0)条件?
- java - JasperReports 导出到 Excel 仅使用最后设置的背景颜色
- php - PHP 异步选项
- cassandra - 修复后修复状态不是 100%
- r - 使用 ggplot 同时显示希腊符号和电荷分面标题
- angular - 服务工作者完成获取新文件时触发事件?
- mysql - 警告:#1292 日期时间值不正确
- javascript - 显示未重叠的所有其他元素
- javascript - Fire-base Cloud Function 部署完成且没有任何错误,但 Firebase 中不存在 Cloud Function
- java - Jackson Custom Deserializer,用于多态对象和默认字符串字面量