1

我有 2 个类处于一对多关系中:

   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 < '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子句,但得到了相同的结果。

4

1 回答 1

2

当您查询实体时,您总是会收到完全实现的对象映射。您无法通过在查询中设置条件来过滤掉进入事件集的内容。如果查询找到 aCompetition那么您将获得整个比赛。当您访问 Set 时,竞赛总是会有它所有的孩子在那里。

换句话说,ORM 查询转换为普通语言:

“在 13 号之后找到至少有一项赛事的每场比赛”

不是

“每场比赛都找我,只有在 13 号之后开始的赛事才包括在内。”

于 2013-09-13T21:15:44.367 回答