【问题标题】:Spring Data Specification Join by specific fieldSpring Data Specification 按特定字段连接
【发布时间】:2021-02-23 09:31:16
【问题描述】:

我有一个看起来像这样的连接:

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 

?

【问题讨论】:

    标签: java jpa join outer-join criteria-api


    【解决方案1】:

    似乎实体之间的关系不是很好,如果你想通过父字段加入它应该是这样的:

    实体修复实体

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="PARENT_ID")
    RepairAssignEntity repairAssignEntity;
    

    实体修复分配实体

    @OneToMany(mappedBy="repairAssignEntity", fetch=FetchType.LAZY)
    List<RepairEntity> RepairEntities;
    

    如果没有,您将不得不重组查询以使其适应 JPA 实体建模。

    关于摆脱条件“on repairenti0_.id = repairassi1_.repair_id”你不能,因为它是实体中定义的隐含关系之一,但是如果你按照我的指示修改建模,只有条件“ repairenti0_.parent_id = repairassi1_ 会出现.repair_id "

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 2015-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      相关资源
      最近更新 更多