0

ちょっと変わった問題が発生しました - 本当に単純なものが欠けているに違いありません! 特に 2 つのテーブルを用意します。

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

以下のように、.HBM.XML ファイルに名前付きクエリがあると思います。

  FROM Proposal MSP
  JOIN FETCH MSP.DataItems Items

Proposal が ProposalData との 1 対多であることを考えると、NH はそれぞれの Proposal オブジェクトと、それぞれの Data をコレクションとしてロードする必要があります。残念ながら、Proposal ごとに複数の ProposalData があるため、結果が重複してしまいます。

私の理解では、これは問題にならないはずです。ProposalData が別のテーブルと 1 対多の関係にある場合、結果はデカルト積になり、上記のことが予想されます。

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

ありがとう。

4

1 に答える 1

1

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

DistinctRootEntityTransformerを使用するか、 を回避して修正してくださいjoin fetch

于 2011-08-02T05:52:44.870 に答える