0

我对使用相同表和相同字段的两个子类有疑问。即使生成的表将此字段作为可为空的唯一标识符,当我保存不使用第三列的一条记录时,创建的字段的值为“000000000-0000-0000-0000-000000000000”而不是 NULL。应用程序的其他部分要求此位置为空。这是代码。怎么了?

   <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly=".."
                       namespace="...">
      <class name="TEST" table="..." discriminator-value="not null">
        <id name="Id" column="tID">
          <generator class="assigned" />
        </id>
        <discriminator column="iTestTypeID" type="Int32" not-null="true"/>

        <property name="TotalScore" column="fTotalScore"/>
        <property name="IsTimedOut" column="bTimedOut"/>
    </hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly=".."
                   namespace="...">
  <subclass name="TestA" extends="TEST" discriminator-value="3">
    <many-to-one name="Department" column="uTestCriteria01" cascade="save-update" not-null="false" />
    <many-to-one name="Building" column="uTestCriteria02" cascade="save-update" not-null="false" />
  </subclass>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly=".."
                   namespace="...">
  <subclass name="TestB" extends="TEST" discriminator-value="3">
    <many-to-one name="Building" column="uTestCriteria01" cascade="save-update" not-null="false" />
    <many-to-one name="Floor" column="uTestCriteria02" cascade="save-update" not-null="false" />
    <many-to-one name="Room" column="uTestCriteria03" cascade="save-update" not-null="false" />
  </subclass>
</hibernate-mapping>
4

1 回答 1

1

我的猜测是您的对象没有使用可为空的类型。

你有这样定义的类型:

public class A
{
    public Guid? field { get; set; }
}

查看这篇 StackOverflow 文章以获得解释:
如何在 C# 中将参数默认为 Guid.Empty?

同样在您的问题中,我将列出您正在谈论的特定字段,以免混淆并发布与此映射相关的对象的代码。

于 2013-10-16T17:27:58.297 回答