根据第 181 页的书,我在理解 Pro JPA 2 书中的这行代码时遇到了一些麻烦。
选择查询的结果类型不能是集合;它必须是单值对象,例如实体实例或持久字段类型。诸如 e.phones 之类的表达式在 SELECT 子句中是非法的,因为它们会导致 Collection 实例(每次出现的 e.phones 都是一个集合,而不是一个实例)。因此,就像 SQL 和表一样,如果我们想沿着集合关联导航并返回该集合的元素,我们必须将两个实体连接在一起。
请考虑以下实体与关系映射
@Entity
public class Employee {
..
@OneToMany(mappedBy="employee", cascade=CascadeType.ALL, targetEntity=Phone.class)
private Collection<Phone> phones = new ArrayList<Phone>();
..
}
@Entity
public class Phone {
..
@OneToOne
private Employee employee;
..
}
现在在一个测试类中,我用这个测试用例进行了尝试
@Test
public void selectCollectionTest(){
TypedQuery<Object> query = em.createQuery("select e.phones from Employee e where e.id = 1", Object.class);
List<Object> empList = query.getResultList();
for(Object temp: empList){
System.out.println(temp);
}
}
我期待会引发异常,但什么都没有发生,我能够选择集合?
它是否正确?有人可以解释或清除我的理解吗?
Eclipselink