Spring数据规范按特定领域加入

问题描述

我的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“