hibernate - 我可以在 NHibernate 中查询派生字段吗?

标签 hibernate nhibernate nhibernate-mapping hibernate-mapping

是否可以向实体中的派生字段添加限制,即。一个没有坚持的人?例如,如果这是我的实体:

public class Employee 
{
    public long Id { get; set; }
    public string Forename { get; set; }
    public string Surname {get; set; }
    public string FullName { get { return Forename + " " + Surname; }}
}

这是映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               namespace="Domain.Entities"
               assembly="Domain">
  <class name="Employee" table="`Employee`">
    <id name="Id" column="Id" type="long">
      <generator class="identity"/>
    </id>
    <property name="Forename"/>
    <property name="Surname"/>
  </class>
</hibernate-mapping>

这是我的查询:

public Employee GetByFullName(string fullName)
{
    return _session
        .CreateCriteria<Employee>
        .Add(Restrictions.Eq("FullName", fullName))
        .List<Employee>();
}

请忽略我可以自己编写查询的事实,这是一个简单的演示示例。这在更复杂的场景中非常有用。

最佳答案

这取决于,基本上如果你可以用SQL复制派生字段那么它就可以完成(所以基本上它可以完成,但它的实用性有所不同)。在您的示例中,您需要映射您的 Fullname 属性,例如:

<property name="Fullname" formula="Forename + ' ' + Surname"/>

然后为了阻止 NHibernate 提示,你需要为 Fullname 定义一个空的 setter:

public virtual string Fullname {
    get { return Forename + " " + Surname; }
    set { } // do nothing
}

然后您将能够查询 Fullname,并且 NHibernate 会将公式正确插入到 sql 中。

关于hibernate - 我可以在 NHibernate 中查询派生字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12674585/

相关文章:

java - JPA id 生成通用策略

java - 简化 Hibernate 的查询

c# - 通过代码零或一关系映射

NHibernate 映射返回空值

class - 如何通过 NHibernate 将多个类映射到一张表?

java - JPA 映射实体图

nhibernate - Fluent Nhibernate 中的自定义 Tuplizer

c# - 通过 nhibernate 对数据库查询进行单元测试

nhibernate - Fluent nHIbernated - 在同一张表中有许多关系

java - 如何在 JPA Repository 接口(interface)中编写不同的 SQL 子句