【发布时间】:2011-04-03 22:13:01
【问题描述】:
我是 JPA 的新手,现在遇到了一个问题!
我有两个表 Person 和 PersonAddress。
在 Person 实体中,我有
@OneToMany(mappedBy="personid")
private Set<Personaddress> personaddressCollection;
和
public Set<Personaddress> getPersonaddressCollection() {
return this.personaddressCollection;
}
public void setPersonaddressCollection(Set<Personaddress> personaddressCollection) {
this.personaddressCollection = personaddressCollection;
}
在 PersonAddress 实体中,我有
@ManyToOne
@JoinColumn(name="PERSONID")
private Person personid;
我正在做一个类似于下面的查询:
List<Person> personlist = em.createQuery("SELECT e FROM Person e").getResultList();
我希望它返回 Person 表中的所有数据以及 Person 实体中可用的 Set 中的 PersonAddress 表中的数据。 personlist 的大小是正确的,但是当我尝试读取 PersonAddress 集合时,我得到的是空值。但数据库中有值,不能为空。
对应每一个Partner,都会有一个不为空的PartnerAddress。 如果到目前为止我所做的任何事情都是错误的,我该如何使用 JPA 查询它?
请帮忙。
【问题讨论】:
-
如果可能(即班级人数很少),您能否发布完整的 Person 和 PersonAddress 班级?
-
不是一个答案,而是两个提示:1)初始化集合(例如
new HashSet<PersonAddress>()),这可以防止 NPE 和 2)不为集合本身提供设置器,您的客户可以直接修改getter 返回的集合。您的 JPA 提供者可能已经注入了优化的集合实现,您应该使用它。 -
文件在这里 - bit.ly/d4TEAd
标签: java jpa jakarta-ee persistence