1

私は Nhibernate と非常に単純な親子関係で次の問題を抱えています。

Save、Update、Delete の 3 つのリスナーがあります。永続化されるオブジェクトが IAuditCreate インターフェイスを実装する場合、CreatedDate フィールドを割り当てます。

親のマッピング

<hibernate-mapping assembly="Model" namespace="Model" xmlns="urn:nhibernate-mapping-2.2">
  <class name="SecSession" table="SEC_SESSION" lazy="true" >
    <id name="SecSessionId">
      <column name="SEC_SESSION_ID" sql-type="bigint" not-null="true" />
      <generator class="identity" />
    </id>
    <property name="CreatedDate">
      <column name="CREATED_DATE" sql-type="datetime" not-null="true" />
    </property>
    <bag name="SecSessionLogs" inverse="true" cascade="all-delete-orphan" >
      <key column="SEC_SESSION_ID" />
      <one-to-many class="SecSessionLog" />
    </bag>
  </class>
</hibernate-mapping>

私の子のマッピング

<hibernate-mapping assembly="Model" namespace="Model" xmlns="urn:nhibernate-mapping-2.2">
  <class name="SecSessionLog" table="SEC_SESSION_LOG" lazy="true" >
    <id name="SecSessionLogId">
      <column name="SEC_SESSION_LOG_ID" sql-type="bigint" not-null="true" />
      <generator class="identity" />
    </id>
    <many-to-one lazy="false" name="SecSession">
      <column name="SEC_SESSION_ID" sql-type="bigint" not-null="true" />
    </many-to-one>
    <property name="LogMessage" type="StringClob">
      <column name="LOG_MESSAGE" sql-type="nvarchar(max)" not-null="true" />
    </property>
    <property name="CreatedDate">
      <column name="CREATED_DATE" sql-type="datetime" not-null="true" />
    </property>
  </class>
</hibernate-mapping>

そこで、SecSession オブジェクトを作成してから、SecSession.AddLog(new SecSessionLog) を呼び出します。

持続するために、私は次のことを行います。

using (var dataSession = DataStore.OpenDataSession())
  using (var transaction = dataSession.BeginTransaction())
  {
    var id = (PK)dataSession.Save(secSession);
    transaction.Commit();
    return id;
  }

マッピングが示すように、保存するために SecSessionLog を明示的に送信しません: CASCADE=ALL-DELETE-ORPHAN.

したがって、ここでの問題は、リスナーが子 Log オブジェクトに対して呼び出されないため、CreatedDate フィールドが空になり、データベースで null 値の例外が発生することです。

マッピングで構成する必要があるものはありますか? リスナーで?

あなたの助けは大歓迎です!

皆さんありがとう

4

1 に答える 1