最近,我将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:我遇到了几个问题,这些问题在升级后已经浮出水面。我们是否有一些文档可以参考升级相关问题?