2012-04-23 16 views
0

(n + 1)解決できない問題を選択してください。私は非PK列とテーブルを結合しています。非PK参加のHibernate(n + 1)選択

マイスキーマ

レコード
RECORD_ID(PK)
Carrier_Number


Audit_Details 1-にあり
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> 

これは私が取得するために変更しようとしてい

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=? 

のようなクエリを生成

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

マイauditDetails.hbm.xml =」 lazy = "false"とlazy = "no-proxy"を変更しますが、これまでのところ何も機能していません。私はこの問題がnonPK列で2つのテーブルを結合するためにあるかどうかはわかりません。何か提案をいただければ幸いです。

答えて

0

問題は私の基準でありマッピングではありませんでした。私の基準のために以下のように設定してこの問題を解決しました。

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

また、3.3に休止状態を更新し、注釈に移動し、以下の設定は、追加の選択の問題を解決しました。

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