0

(n+1) 私が解決できない問題を選択してください。非 PK 列を含むテーブルを結合しています。

私のスキーマ

レコード
Record_Id (PK)
Carrier_Number


Audit_Details
AuditId(PK)
Carrier_Number

Records と Audit_Details の間には 1 対多の関係があります。

マイ 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" を変更しようとしましたが、これまでのところ何も機能していません。この問題が 2 つのテーブルを非 PK 列で結合したことが原因であるかどうかはわかりません。提案をいただければ幸いです。

4

1 に答える 1

0

問題は私の基準にあり、マッピングではありませんでした。私の基準を以下に設定することで、この問題を解決しました。

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

また、Hibernate を 3.3 に更新し、以下の注釈と設定に移動して、追加の選択の問題を解決しました。

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CARRIER_NUMBER")
public Records getRecord() {
    return record;
}
于 2012-04-25T19:25:24.577 に答える