Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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
Hibernate 关于manytone-Lazy关系的不同结果_Hibernate_Jpa_Lazy Loading_Many To One - Fatal编程技术网

Hibernate 关于manytone-Lazy关系的不同结果

Hibernate 关于manytone-Lazy关系的不同结果,hibernate,jpa,lazy-loading,many-to-one,Hibernate,Jpa,Lazy Loading,Many To One,我想问你一个问题。我编写了一个类似这样的JPQL查询(我编写了我想引起您注意的部分): MyEntity是这样的: @Entity @Table(name="DBTABLE") public class MyEntity implements Serializable { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ID_TABLE") private MyEntityTwo myEntity

我想问你一个问题。我编写了一个类似这样的JPQL查询(我编写了我想引起您注意的部分):

MyEntity是这样的:

@Entity
@Table(name="DBTABLE")
public class MyEntity implements Serializable {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="ID_TABLE")
    private MyEntityTwo myEntityTwo;

    ...

    //getter and setter
}
所以,当我执行查询时,它也会为某些id筛选器返回myEntityTwo对象(但..它不是懒惰的?!),而不会为其他id筛选器返回任何myEntityTwo对象。 奇怪的是,sql生成的查询(我从stacktrace中看到)在这两种情况下看起来都一样! 我正在使用Oracle和JPA(Hibernate提供程序)
我无法解释为什么

因此,您是说上面的JPQL也返回
myEntityTwo
对象,但只返回
myEntityTwo
的特定
id
,而不是所有对象。如果是这样,则可能没有该
myEntityOne
的相关
myEntityOne
记录。您也可以尝试使用
左连接
而不是
连接
。一个不同的注释,您是否希望它是
e.id=:id
而不是
s.id=:id
。嗨,Madhusudana Reddy Sunnapu,有一些元素尊重MyEntity和MyEntityTwo之间的关系,并且该关系由id值过滤。执行查询后,我看到了完整的列表。解决方案是将
JOIN e.myEntityTwo s
替换为
JOIN FETCH e.myEntityTwo s
,使其也具有myEntityTwo对象,但我无法解释发生这种情况的原因:(当我们使用
JOIN
时,它只连接实体,但不填充相关实体,除非我们指定
JOIN FETCH
。此链接可能有助于我了解这一点。事实上,我希望我从未在MyEntity中找到myEntityTwo对象。那么为什么在某些情况下我会找到它?这取决于它是否在某个缓存中?它是否重要托兰特?
@Entity
@Table(name="DBTABLE")
public class MyEntity implements Serializable {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="ID_TABLE")
    private MyEntityTwo myEntityTwo;

    ...

    //getter and setter
}