1

在我的应用程序中,我使用的是 nhibernate 2.2。我有一个名为 ReportMaster 的表。在此表中,它有一个名为 JOB_NUM 的字段。该文件的数据如下

JOB_NUM
CT-2012-0072
GEN-2012-0003
UKNDT-2012-0001
CT-2012-0076-EN

在我的属性类中,这被映射到 JobNumber 字段。我的问题是,当我将查询用作 {JobNumber in (CT-2012-0072)} 或 {JobNumber in (UKNDT-2012-0001)} 时,它给了我记录。但是当我将查询用作 {JobNumber in (GEN-2012-0003)} 时,它不会返回记录。

有人对这种不当行为有想法吗?“GEN”是一个休眠关键字吗?我也试过 {JobNumber in ("GEN-2012-0003")} 。它也不返回记录我使用的代码如下:

            ArrayList searchValues = new ArrayList();
            string jobNumber = "CT-2012-0072";
            searchValues.Add(jobNumber);

            ArrayList reportColumns = new ArrayList();

            reportColumns.Add("JobNumber");
            IList reports = connection.LoadListByColumnFilter<OutageReport>("JobNumber", searchValues);

       public IList LoadListByColumnFilter<T>(string column, ArrayList values)
    {
        if (session == null)
        {
            return null;
        }
        else
        {
            IList list = null;
            ICriteria criteria = session.CreateCriteria(typeof(T));
            criteria.Add(Expression.In(column, values));
            list = criteria.List();
            return list;
        }
    }
4

1 回答 1

2

如果代码对某个值起作用,那么它似乎是正确的。我的猜测是没有返回GEN-2012-0003记录,因为数据库内容不是它看起来的样子。例如:

  • 数据库列包含前导或尾随空格
  • 数据库列包含不可打印的字符(如 CR 或 LF)
  • 其中一个字符不是它看起来的样子(例如,零实际上是字母“O”,或者看起来像减号的东西是一个类似的 unicode 字符)

我建议打开休眠 SQL 日志记录并检查生成的 SQL 语句。然后复制 SQL 工具中的语句并尝试在那里执行它,看看它是否返回记录。如果不是,那么这不是休眠问题。

于 2012-06-07T16:51:39.417 回答