2013-01-17 26 views
0

...沒有子類,因此即使在數據庫中存在D1時,調用em.find(Department.class,「D1」)仍然返回空值,但未檢查數據存儲區

的調試日誌顯示消息: 唯一候選人的編號是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' 

,並返回從DB的實體。

這是爲什麼? datanuclueus何時在參數中添加尖括號<>?

請指點

感謝,

回答

1

「不檢查數據存儲」意味着它知道什麼是要返回的對象的類型,因此它不檢查數據存儲驗證類型。爲什麼它只返回null,只有您可以回答,因爲您知道數據存儲庫中的內容,日誌中的內容以及該類別的內容。

尖括號表示一個JDBC語句的參數(所以在真正的語句中是「?」)。這是LOGGING,而不是數據存儲。

相關問題