簡體   English   中英

使用非PK連接進行休眠(n + 1)選擇

[英]Hibernate (n+1) select with non-PK join

(n + 1)個我無法解決的問題。 我正在用非PK列連接表。

我的架構

記錄
Record_Id(PK)
承運人編號


Audit_Details
AuditId(PK)
承運人編號

記錄和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=?

我嘗試更改為fetch =“ select”,更改lazy =“ false”和lazy =“ no-proxy”,但到目前為止沒有任何效果。 我不確定這個問題是否是由於使用nonPK列連接兩個表引起的。 將不勝感激任何建議。

問題出在我的條件而不是映射上。 通過在下面設置我的標准來解決此問題。

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

此外,將Hibernate更新為3.3,並移至注釋和下面的設置解決了其他選擇問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM