How to create two columns left join jpa?

Is there a way to make a query in jpa with a left join on two columns, for example as follows in plain sql?

select combinedin1_.SHIPMENTNUMBER , shipmentin3_.INBOUNDDELIVERYITEM , combinedin1_.PURCHASEORDERNUMBER, combinedin1_.PURCHASEORDERITEMNUMBER , purchaseor2_.FACTORY from REPORT.REPORTLINK this_ left outer join REPORT.COMBINEDINFO combinedin1_ on this_.COMBINEDINFOID=combinedin1_.COMBINEDINFOID left outer join REPORT.PURCHASEORDERINFO purchaseor2_ on this_.PURCHASEORDERINFOID=purchaseor2_.PURCHASEORDERINFOID and purchaseor2_.DELETED='N' left outer join REPORT.SHIPMENTINFO shipmentin3_ on this_.SHIPMENTINFOID=shipmentin3_.SHIPMENTINFOID and shipmentin3_.DELETED='N' 

More specifically, this is a left join written in plain sql:

 left outer join REPORT.SHIPMENTINFO shipmentin3_ on this_.SHIPMENTINFOID=shipmentin3_.SHIPMENTINFOID and shipmentin3_.DELETED='N' 

This is my reportLink object in JPA:

 @Entity @Table(name = "REPORTLINK") public class ReportLinkFull implements Serializable { private static final long serialVersionUID = -2330676941570524461L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "REPORTLINKID") private Integer id; @ManyToOne @JoinColumn(name = "SALESORDERINFOID") private SalesOrderInfo salesOrderInfo; @ManyToOne @JoinColumn(name = "PURCHASEORDERINFOID") private PurchaseOrderInfo purchaseOrderInfo; @ManyToOne @JoinColumn(name = "SHIPMENTINFOID") private ShipmentInfo shipmentInfo; @ManyToOne @JoinColumn(name = "MATERIALINFOID") private MaterialInfo materialInfo; @ManyToOne @JoinColumn(name = "CUSTOMERINFOID") private CustomerInfo customerInfo; @ManyToOne(cascade={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REMOVE}) @JoinColumn(name = "COMBINEDINFOID") private CombinedInfo combinedInfo; @Version private Integer version; 

Hey.

+4
source share
1 answer

I found the answer, this is possible with the WITH statement:

 em.createQuery("SELECT rl FROM ReportLinkFull rl LEFT OUTER JOIN rl.shipmentInfo sh WITH sh.deleted = 'N' LEFT OUTER JOIN rl.purchaseOrderInfo po WITH po.deleted = 'N'").getResultList(); 
+6
source

Source: https://habr.com/ru/post/1393113/


All Articles