Hibernate:左连接中的where子句无法正常工作

时间:2013-09-13 21:07:54

标签: java hibernate left-join where-clause

我在一对多关系中有两个班级:

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

1 个答案:

答案 0 :(得分:2)

当您查询实体时,您总是会收到完全实现的对象映射。您不能通过在查询上添加条件来过滤掉事件集中的内容。如果查询找到Competition,那么您将获得整个竞争。当你访问Set时,比赛总是让所有的孩子都在那里。

将ORM查询转换为普通语言的另一种方式为:

“找到每个至少有一个事件在13日之后开始的比赛”

“在每个比赛中找到我,只有在13日之后才开始参加比赛。”