こんにちは、ドキュメントの一対多マッピングを含む Request クラスがあります。
リクエストクラス
public class Request
{
virtual public int Id
{
get;
set;
}
...
virtual public Iesi.Collections.Generic.ISet<Document> Documents
{
get;
set;
}
}
ドキュメント クラス
public class Document
{
public virtual int Id
{
get;
set;
}
public virtual int ParentEntityId
{
get;
set;
}
}
XML マッピングは次のようになります。 REQUEST
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="xxxx"
namespace="xxxx.Domain">
<class name="Request" table="tbl_Req">
<id name="Id" column="req_id">
<generator class="native"></generator>
</id>
<set name="Documents" cascade="all-delete-orphan" inverse="false">
<key column="doc_parent_ent_id" not-null="true"/>
<one-to-many class="xxxx.Domain.Document"/>
</set>
</class>
</hibernate-mapping>
DOCUMENT は次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="xxxx"
namespace="xxxx.Domain">
<class name="Document" table="tbl_doc">
<id name="Id" column="doc_id">
<generator class="native"></generator>
</id>
</class>
</hibernate-mapping>
この構成で、NHibernate が作成するドキュメントを保存すると
INSERT INTO tbl_doc (doc_digimage_code, doc_lnk_filename, doc_lnk_filepath, doc_timestamp, doc_author, doc_parent_ent_id) VALUES (@p0, @p1, @p2, @p3, @p4, @p5); select SCOPE_IDENTITY()',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 datetime,@p4 int,@p5 int',@p0=N'1',@p1=NULL,@p2=NULL,@p3='2013-02-28 18:05:45',@p4=7353,@p5=174
と
UPDATE tbl_doc SET doc_parent_ent_id = @p0 WHERE doc_id = @p1',N'@p0 int,@p1 int',@p0=174,@p1=32
既に正しい値を持つフィールドを更新するときに、NHibernate が INSERT と UPDATE を生成する理由がわかりません。
また、この投稿NHibernate insert がコレクション項目の更新を生成することを発見しまし た。
ありがとう