即使数据库中存在 D1,调用 em.find(Department.class, "D1") 也会返回 null。
调试日志显示消息为: id 的唯一候选者是 com.ge.dsp.iwork.entity.Department 并且没有子类,因此在不检查数据存储的情况下返回
这意味着什么?为什么它返回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'
并从数据库返回实体。
为什么会出现这种情况?datanuclueus 何时在参数中添加尖括号 <>?
请指教
谢谢,