我在一对多关系中有两个班级:
Class Competition{
@OneToMany(fetch=FetchType.EAGER, mappedBy="competition")
public Set<Event> getEvents() {
return events;
}
}
Class Event{
@ManyToOne
@JoinColumn(name="id_competition")
public Competition getCompetition() {
return competition;
}
}
当我运行下面的查询时,我会收到更多数据。在数据库中,我有一个竞赛条目,我们称之为c1,以及3个事件:e1,e2和e3。其中一个事件不符合条件(e1有stardate&lt;'2013-09-13')但是当我运行查询时我得到3个事件而不是2个。我确信数据库中的数据,所以 where子句的问题是什么?
"select com from Competition as com inner join com.events event where event.expectedStartdate > '2013-09-13' "
另外,我必须指定如果我删除满足条件的2个事件并保持不符合条件的事件,则查询不返回任何内容(没有对象竞争)。
我也尝试了with
子句,但得到了相同的结果。
答案 0 :(得分:2)
当您查询实体时,您总是会收到完全实现的对象映射。您不能通过在查询上添加条件来过滤掉事件集中的内容。如果查询找到Competition
,那么您将获得整个竞争。当你访问Set时,比赛总是让所有的孩子都在那里。
将ORM查询转换为普通语言的另一种方式为:
“找到每个至少有一个事件在13日之后开始的比赛”
不的
“在每个比赛中找到我,只有在13日之后才开始参加比赛。”