最近,我將Eclipse鏈接版本從2.1升級到2.5。 我的實體類看起來像下面Eclipse鏈接版本從2.1升級到2.5導致問題
/**
* For subordinates, the manager employee.
*/
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MANAGER", insertable=false, updatable=false, nullable=true)
private Employee manager;
/**
* For employees with subordinates, the subordinate employee.
*/
@OneToMany(mappedBy="manager", fetch=FetchType.LAZY)
@OrderBy("subordinate_order asc")
private List<Employee> sub;
請找到其代碼片段問題下面。它在升級之前工作正常,但現在它在assertEquals上失敗。這裏,managerID指的是具有0個下屬的員工。
Query query = getEntityManager().createQuery(
"select e.sub from Employee e where e.id = :id");
query.setParameter("id", managerId);
List<Employee> subs = query.getResultList();
assertEquals("Wrong number of subs for manager emp id "+managerId,
0, subs.size());
我發現,與使用的EclipseLink 2.1以下查詢被炒魷魚
SELECT e0.ID, e0.PROP1, e0.PROP2, e0.SUBORDINATE_ORDER, e0.MANAGER FROM EMPLOYEE e0, EMPLOYEE e1 WHERE ((e1.ID = ?) AND (e0.MANAGER = e1.ID))
但是升級後的查詢後,被解僱
SELECT e0.ID, e0.PROP1, e0.PROP2, e0.SUBORDINATE_ORDER, e0.MANAGER FROM EMPLOYEE e1 LEFT OUTER JOIN EMPLOYEE e0 ON (e0.MANAGER = e1.ID) WHERE (e1.ID = ?)
當我手工執行上面的查詢。以下是結果。 (在這兩個Oracle和PostgreSQL)
id prop1 prop2 subordinate_order manager
------ ---------- -------- ---------- --------------
(null) (null) (null) (null) (null)
這是造成subs.size()返回1個而不是0預期subs.get(0)返回null。
問題1: 什麼需要進行修改,以便subs.size()再次開始返回0。 問題2: 我有兩個問題,這在升級之後已經浮出水面。我們是否有一些文件,可以引用升級相關的問題?
謝謝@詹姆斯,在這裏爲您提供幫助。我們是否有一些文件,可以引用升級相關的問題? – phoneynk
謝謝@詹姆斯,我的其他問題也通過明確定義JOIN來解決。我上市下來的其他問題僅供參考。 – phoneynk
謝謝@詹姆斯,我的其他問題也通過顯式定義JOIN得到解決。 [a] PSQLException:錯誤:表名" t1 "指定了多次[b]無法解析JPA查詢。另外,我想感謝您的博客。我可擴展地遵循這個特定的帖子'java-persistence-performance' – phoneynk