0

NHibernate の次の動作を理解しようとしていますが、理解できません。

session.CreateCriteria<Param>()
  .Add(Restrictions.Eq("GroupId", groupId))
  .Add(Restrictions.Eq("ParamId", paramId))
  .List<Param>()

この構造は、1 つのデータベース行 (オブジェクト) を持つコレクションを返す必要があります。ただし、単一の null 要素を含むリストを返します。理由を教えてください。

PS Param クラス マッピングには複合キーがあります。

public class Param
{
    public Param()
    {
    }
    public Param(string groupId, string paramId, string paramName) : this()
    {
        GroupId = groupId;
        ParamId = paramId;
        ParamName = paramName;
    }
    public virtual string GroupId { get; protected set; }
    public virtual string ParamId { get; protected set; }
    public virtual string ParamName { get; protected set; }
    public virtual string Value { get; set; }

    public override bool Equals(object obj){...}
    public override int GetHashCode(){...}
}

public class ParamMap : ClassMap<Param>
{
    public ParamMap()
    {
        Table("Params");

        CompositeId()
            .KeyProperty(x => x.GroupId)
            .KeyProperty(x => x.ParamId)
            .KeyProperty(x => x.ParamName, "ParamName");

        Map(x => x.Value, "ParamValue");
    }
}

このクエリは、データベース ログからコピーされます。Hibernate がそれを実行します。

SELECT THIS_.GROUPID AS GROUPID19_0_, THIS_.PARAMID AS PARAMID19_0_,
THIS_.PARAMNAME AS PARAMNAME19_0_, THIS_.PARAMVALUE AS PARAMVALUE19_0_
FROM PARAMS THIS_ WHERE THIS_.GROUPID = :1 AND THIS_.PARAMID = :2 
\
WorkHour,TotalHours, 
/

1 行を返します。

GroupId = "WorkHour"
ParamId = "TotalHours"
ParamName = (empty) 
ParamValue = YES
4

1 に答える 1

0

それは私のせいでした。ParamName 値が空の文字列ではありません。ヌルです!というわけで、これは NHibernate の奇妙な動作ですが、理由が見つかりました。

于 2013-05-21T10:45:02.473 に答える