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 はいつ山括弧 <> をパラメーターに追加しますか?
ご意見をお聞かせください
ありがとう、