1

私のアプリケーションでは、nhibernate2.2を使用しています。ReportMasterという名前のテーブルがあります。このテーブルには、JOB_NUMという名前のフィールドがあります。このファイルには次のようなデータがあります

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

私のプロパティクラスでは、これはJobNumberfiledにマップされていました。私の問題は、クエリを{JobNumber in(CT-2012-0072)}または{JobNumber in(UKNDT-2012-0001)}として使用すると、レコードが得られることです。しかし、クエリを{JobNumber in(GEN-2012-0003)}として使用すると、レコードが返されません。

誰かがこの不正行為について考えを持っていますか?「GEN」はnhibernateキーワードですか?{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など)が含まれている
  • 文字の1つは、見た目とは異なります(たとえば、ゼロは実際には文字「O」であるか、マイナスのように見えるものは似たようなUnicode文字です)

Hibernate SQLロギングをオンにして、生成されたSQLステートメントを確認することをお勧めします。次に、SQLツールでステートメントをコピーし、そこで実行して、レコードが返されるかどうかを確認します。そうでない場合、これは休止状態の問題ではありません。

于 2012-06-07T16:51:39.417 に答える