问题描述
我的Join看起来像这样:
Join<RepairEntity,RepairAssignEntity> joinRepairAssignEntities = root.join(RepairEntity_.repairAssignEntities,LEFT);
当它转换为sql时,看起来像
left outer join
repair_assign repairassi1_
on repairenti0_.id=repairassi1_.repair_id
我希望它像:
left outer join
repair_assign repairassi1_
on repairenti0_.PARENT_ID=repairassi1_.repair_id
如果我向该联接添加条件:
Predicate equal = cb.equal(root.get(RepairEntity_.parentId),repairEntityPath.get(RepairEntity_.id));
joinRepairAssignEntities = joinRepairAssignEntities.on(equal);
做到了
left outer join
repair_assign repairassi1_
on repairenti0_.id=repairassi1_.repair_id
and (
repairenti0_.parent_id=repairassi1_.repair_id
)
如何摆脱
on repairenti0_.id=repairassi1_.repair_id
?
解决方法
先验的是,实体之间似乎没有很好的关联,如果您想通过父字段加入,则应该是这样的:
实体RepairEntity
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="PARENT_ID")
RepairAssignEntity repairAssignEntity;
实体RepairAssignEntity
@OneToMany(mappedBy="repairAssignEntity",fetch=FetchType.LAZY)
List<RepairEntity> RepairEntities;
如果不是,则必须重新构造查询以使其适应JPA实体建模。
关于摆脱条件“ repairenti0_.id = repairassi1_.repair_id”,您不能,因为它是实体中定义的隐式关系之一,但是如果您按照我的指示修改建模,则仅条件“ repairenti0_.parent_id = repairassi1_将会出现。.repair_id“