【发布时间】:2012-01-14 09:20:05
【问题描述】:
我使用 EclipseLink 9 个月,到目前为止没有问题。因为我有 需要查询具有 OneToMany 属性的实体,情况恰恰相反。 它给了我一个奇怪的结果。 我已将实体简化到最大,但问题仍然存在。
我将解释我的需求,这非常简单:我有两个实体: 与地址有双向关系的人。 人可能有多个地址,但一个地址属于一个并且 只有一个人。
在类中,它给出了:
@Entity
public class Person implements Serializable {
@Id
private Long id;
@OneToMany(mappedBy = "person", fetch = FetchType.LAZY)
private Set<Address> addresses;
// Getter and setter
...
}
@Entity
public class Address implements Serializable {
@Id
private String idAddress;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idPerson", referencedColumnName = "idPerson")
private Person person;
// Getter and setter
...
}
我想用他们的地址查询人员。所有这一切都有一些条件 关于人员和地址。 我的简化查询:
select pers FROM Person pers join pers.addresses address
where pers.matricule=:matricule
and address.date=:dateContract
当我执行它时,我检索到正确的人,但包含所有地址 与此人链接(使用外键)。甚至那些没有的地址 与 dateContract 条件匹配。
这似乎是与在 oneToMany 上使用过滤有关的问题 我的查询中的属性。如果我做了几个请求,问题就解决了,但是 由于我有几个这样的请求,它会导致性能下降。 我已经尝试使用 oneToMany 进行急切的初始化并使用 fetch-join 查询提示,但我得到了相同的结果。
感谢您阅读我:)
PS : 代码我是手动写的,有点错字也不是不可能
大卫
【问题讨论】:
标签: java jpa eclipselink jpql