HBM 映射字段和 属性

HBM mapping both field and property

我有以下 class:

public class Foo 
{
    //...
    protected int? someData;
    public int? SomeData
    {
        get {return someData;}
        set {someData = value;}
    }
    //...
}

此 class 映射到 HBM 文件中:

<class name="Foo" table="Foo">
//....
    <property name="someData" access="field" column="SOME_DATA" />
//....
</class>

由于遗留原因,列被映射到不可访问的字段(小写)(不是 public 属性 - 大写)。

这些小写映射作为 HQL 字符串、基于条件的查询等的一部分在项目中多次使用。几乎不可能找到所有用法。

问题是这样的用法使得即使在简单的 lambda 上也无法使用:

session.Query<Foo>().Select(f=>f.SomeData)

抛出错误,因为大写 "SomeData" 未映射,而

session.Query<Foo>().Select(f=>f.someData)

不编译,因为小写 "someData" 受保护。

如果我同时映射两个字段和 属性:

会发生什么
<property name="someData" access="field" column="SOME_DATA" />
<property name="SomeData" access="property" column="SOME_DATA" />

我试的很快,好像可以,但是会不会有什么缺点?

是否有任何其他简单的解决方案,不需要编辑项目中每个基于条件的查询?

感谢您的帮助。

您可以多次映射同一列,但对于最新的 NHibernate 版本,只有一个属性需要映射为可修改的。因此,只需将 insert="false" update="false" 添加到您的附加映射中,以避免将来出现任何问题:

<property name="someData" access="field" column="SOME_DATA" />
<property name="SomeData" access="property" column="SOME_DATA" update="false" insert="false" />