我对 Nhibernate 和一个非常简单的父子关系有以下问题。
我有三个听众:保存、更新、删除。如果被持久化的对象实现 IAudiCreate 接口,我分配 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 字段为空,我在数据库中得到一个空值异常。
映射中是否缺少要配置的内容?在听众中?
您的帮助将不胜感激!
谢谢大家