2012-04-23 42 views
0

(n + 1)選擇我無法解決的問題。我正在與非PK列連接表。休眠(n + 1)選擇與非PK加入

我的架構

記錄
RECORD_ID(PK)
Carrier_Number


Audit_Details
AuditId(PK)
Carrier_Number

有一到 - 之間的關係記錄和Audit_Details。

我records.hbm.xml

<set lazy="true" name="auditDetails" sort="unsorted" 
     table="AUDIT_DETAILS" inverse="true"> 
     <key column="Carrier_Number" not-null="true" property-ref="carrierRefNumber"/> 
     <one-to-many 
      class="com.package.AuditDtls" /> 
    </set> 

我auditDetails.hbm.xml

<many-to-one 
     class="com.package.Records" fetch="join" 
     name="Records" column="Carrier_Number" not-null="true" property-ref="carrierNumber" lazy="false"/> 

這會產生像

select 
    this_.CARRIER_NUMBER as CARRIER1_2_2_, 
    abc1_.CARRIER_NUMBER as CARRIER8_3_0_, 
    otm4_.CARRIER_NUMBER as CARRIER1_2_1_, 
from 
    RECORDS this_ 
inner join 
    AUDIT_DETAILS abc1_ 
     on this_.CARRIER_NUMBER=abc_.CARRIER_NUMBER 
left outer join 
    RECORDS otm4_ 
     on abc1_.CARRIER_NUMBER=otmp4_.CARRIER_NUMBER 
where 
    this_.LOAD_ID=? 

select 
    auditde0_.CARRIER_NUMBER as CARRIER8_1_   
from 
    AUDIT_DTLS auditde0_ 
where 
    auditde0_.CARRIER_NUMBER=? 

我試圖改變來獲取查詢=」選擇「,改變懶惰=」假「和懶惰=」無代理「,但迄今爲止沒有任何工作。我不確定這個問題是否因爲使用nonPK列連接兩個表。將不勝感激任何建議。

回答

0

問題出在我的標準,而不是映射。通過設置以下我的標準解決了這個問題。

createAlias("auditDetails", "ad", CriteriaSpecification.LEFT_JOIN); 

此外,更新休眠至3.3並移動到註釋和下面設置解決額外選擇問題。

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name = "CARRIER_NUMBER") 
public Records getRecord() { 
    return record; 
}