2012-01-26 11 views
4

2つの列に左結合を使用してjpaでクエリを作成する方法はありますか?プレーンSQLでは次のようにしますか?jpaで2列左結合を作成する方法は?

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' 

より具体的な本は左で、プレーンSQLで書かれた結合:

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

これは、JPAの私reportLinkエンティティである:

@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; 

ご挨拶。

+0

。 – oers

答えて

6

私はそれがオペレータWITHで可能で、答えを見つけました:(後で受け入れることができます)あなたは明日、この質問への答えとして、あなたのソリューションを投稿する必要がありますすることができ

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(); 
関連する問題