Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:左联接中的where子句工作不正常_Java_Hibernate_Left Join_Where Clause - Fatal编程技术网

Java Hibernate:左联接中的where子句工作不正常

Java Hibernate:左联接中的where子句工作不正常,java,hibernate,left-join,where-clause,Java,Hibernate,Left Join,Where Clause,我在一对多关系中有两个类: Class Competition{ @OneToMany(fetch=FetchType.EAGER, mappedBy="competition") public Set<Event> getEvents() { return events; } } Class Event{ @ManyToOne @JoinColumn(

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

   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;
        }
    }
班级竞赛{
@OneToMany(fetch=FetchType.EAGER,mappedBy=“competition”)
公共集getEvents(){
返回事件;
}
}
班级活动{
@许多酮
@JoinColumn(name=“id\u竞争”)
公开竞争{
回归竞争;
}
}
当我运行下面的查询时,我会收到更多的数据。在数据库中,我有一个竞赛条目,我们称之为c1,以及3个事件:e1、e2和e3。其中一个事件不符合条件(e1的起始日期为<'2013-09-13'),但当我运行查询时,我得到了3个事件,而不是2个。我确信数据库中的数据,那么where子句有什么问题

“从竞争中选择com作为com内部加入com.events事件,其中event.expectedStartdate>‘2013-09-13’”

此外,我必须指定,如果删除满足条件的两个事件并保留不满足条件的事件,则查询将不返回任何内容(无对象竞争)


我还尝试了
with
子句,但得到了相同的结果

查询实体时,您总是会收到完全实现的对象映射。您不能通过在查询中设置这样的条件来过滤出进入事件集中的内容。如果查询找到一个
竞赛
,那么您将获得整个竞赛。当你进入片场时,比赛的所有孩子都会在那里

换句话说,ORM查询转换为普通语言的另一种方式是:

“为我查找每项比赛,其中至少有一项比赛在13日之后开始”

不是


“为我查找每项比赛,并且仅包括在13日之后开始的活动。”

从交互式DB UI运行查询时会发生什么?另外,您还没有说明正在使用哪个数据库。请尝试删除
fetch=FetchType.EAGER
,然后运行查询,您告诉hibernate加载所有子对象。@Jim Garrison我正在使用mysql。我将编辑我的帖子,以在DB UI中放置有关运行查询的详细信息。@Sachin Thapa据我所知,Earge(或LAZY)只指定加载集合的时间,其他什么都不指定。查询的返回类型是一个实体,当找到该实体时,您将获得整个实体。不要认为它只是将SQL结果集映射到值对象上。这不是它的工作原理!我感兴趣的是:“找到每一场比赛,至少有一项比赛在13日之后开始,并把那些比赛在13日之后开始。”。这不可能吗?当然,请确保查询的返回类型为事件?返回一个“部分”实体在宏大的计划中是一种无稽之谈。如果它向您返回了一个只有部分孩子列表的比赛,那么它也有义务删除您在会话同步时未包含的孩子……好的,我将考虑另一种方法,并返回反馈。