2011-08-02 12 views
0

ちょっとした異常な問題がありました。私は行くよない限りNHIbernate 1.2 And Lazy Loading

FROM Proposal MSP 
    JOIN FETCH MSP.DataItems Items 

:私は以下のように私の.HBM.XMLファイルに名前付きクエリを持っていると思う

<class name="Proposal" table="Proposal"> 
     <id name="Id" column="ProposalId"> 
     <generator class="identity" /> 
     </id> 

     <property name="QuotationNumber" column="QuotationNumber" access="nosetter.camelcase-underscore" /> 

     <set name="DataItems" table="ProposalData" inverse="true" cascade="save-update" access="nosetter.camelcase-underscore" lazy="true"> 
     <key column="ProposalId" /> 
     <one-to-many class="Fortron.Fastr.Domain.Proposal.ProposalData, Fortron.Fastr.Domain"/> 
     </set> 
    </class> 

<class name="ProposalData" table="ProposalData"> 
     <id name="Id" column="ProposalDataId"> 
     <generator class="identity" /> 
     </id> 
     <many-to-one name="Proposal" column="ProposalId" class="Fortron.Fastr.Domain.Proposal.Proposal, Fortron.Fastr.Domain" /> 

    </class> 

: は、特に2つのテーブルを持っていますプロポーザルがProposalDataを使用して1対多である場合、NHはプロポーザル・オブジェクトのそれぞれをロードし、それぞれのデータをコレクションとしてロードする必要があります。 残念ながら、私は各プロポーザルに複数のProposalDataがあるので、重複した結果に終わります。

これは問題ではありません。 ProposalDataが別のテーブルと一対一で対応すると、デカルト積が得られ、上記を期待することができます。

私は間違っていますか?誰でも光を当てることはできますか?

ありがとうございました。

+0

Ahhhhhhhhhhh!プロポーザルは、各プロポーザルのProposalDataと同様に多くの結果を返すので、デカルト積が生成され、NHが上記のようにデータをロードする原因となります。 – TheITGuy

答えて

1

JOIN FETCHは、アイテムが結合され、それらをフェッチするために使用されることを意味します。これは、提案の乗算につながる。注:重複はメモリ内の同じインスタンスです。

DistinctRootEntityTransformerを使用して、またはjoin fetchを使用して修正します。

+0

こんにちはStefan - FETCHは本質的にProposalDataの権利を熱心に読み込みますか?この場合、提案書を印刷するためのNHの方法はありますか?それぞれのProposalDataを取得するためにデータベースごとにヒットする必要はありませんか? – TheITGuy

+0

ありがとうございます。しかし、私がJOIN FETCHを避けると、Proposalに関連するProposalData項目を取得することはできません。 (少なくとも熱心ではない?) – TheITGuy

関連する問題