0

em.find(Department.class, "D1") の呼び出しは、D1 がデータベースに存在する場合でも null を返します。

デバッグ ログに次のメッセージが表示されます

どういう意味ですか?なぜnullを返すのですか?


次に、を使用しようとしました

            departmentId = emp.getDepartment().getDeptNo().trim();
            Query query = em.createQuery("SELECT d FROM Department d WHERE   
      trim(d.deptNo) = :departmentId");     
            query.setParameter("departmentId", departmentId);

注: departmentId は、ここでパラメーターに渡す前に既にトリムされています。

ログに出力されるクエリは次のとおりです。

SELECT 'com.ge.dsp.iwork.entity.Department' AS  
NUCLEUS_TYPE,D.DEPTNAME,D.DEPTNO,D.LOCATION,D.MGRNO FROM DEPARTMENT D WHERE D.DEPTNO =  
<'D1'>

0 行を返します。

クエリを次のように変更したとき

            departmentId = emp.getDepartment().getDeptNo().trim();
            Query query = em.createQuery("SELECT d FROM Department d WHERE trim(d.deptNo) = :departmentId");     // 'D1'");
            query.setParameter("departmentId", departmentId.trim());

注: departmentId は、パラメーターとして設定する際に再度トリムされるようになりました。

ログ ファイルにはクエリが次のように表示されます。

SELECT 'com.ge.dsp.iwork.entity.Department' AS NUCLEUS_TYPE,D.DEPTNAME,D.DEPTNO,D.LOCATION,D.MGRNO FROM DEPARTMENT D WHERE D.DEPTNO = 'D1'

DB からエンティティを返します。

このケースはなぜですか?datanucleus はいつ山括弧 <> をパラメーターに追加しますか?

ご意見をお聞かせください

ありがとう、

4

1 に答える 1

1

「データストアをチェックしない」とは、返されるオブジェクトの型が何であるかを認識しているため、型を検証するためにデータストアをチェックしていないことを意味します。null が返される理由は、データストアの内容、ログの内容、およびそのクラスが何であるかを知っているため、あなただけが答えることができます。

山かっこは、JDBC ステートメントに対するパラメーターを表します (つまり、実際のステートメントでは "?" です)。これは LOGGING であり、データストアに送信されるものではありません。

于 2013-01-19T08:26:47.323 に答える