gpt4 book ai didi

java - @LazyCollection(LazyCollectionOption.FALSE) 和@OneToMany(fetch = FetchType.EAGER) 之间的区别

转载 作者:太空狗 更新时间:2023-10-29 22:56:35 25 4
gpt4 key购买 nike

我对“延迟加载”有一个疑问。使用 @LazyCollection(LazyCollectionOption.FALSE)@OneToMany(fetch = FetchType.EAGER) 有什么区别?

在我的应用程序中我使用了两个列表,但是如果我以这种格式使用:

@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;


@OneToMany(mappedBy = "consulta", orphanRemoval = true, fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
private List<Contato> contatos;

我有这个错误:

Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags

我知道这是因为 Hibernate 不允许我同时加载两个列表。但是如果我使用这种格式:

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consultaSQL", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<ParametroSQL> parametros;

@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "consulta", orphanRemoval = true,
cascade = CascadeType.ALL)
private List<Contato> contatos;

它完美地工作。

对不起我的英语谢谢

最佳答案

注释之间的根本区别在于 @OneToMany 及其参数(例如 fetch = FetchType.EAGER)是纯 JPA。它可以与任何 JPA 提供程序一起使用,例如 Hibernate 或 EclipseLink。

@LazyCollection 另一方面,是特定于 Hibernate 的,显然只有在使用 Hibernate 时才有效。

如果可能,尽量遵守 JPA 规范。通过这样做,您应该能够轻松地切换提供商(至少在理论上)。

至于您真正的问题,可能是因为您使用的是不支持 JPA 2.0 的 Hibernate 版本 this答案暗示?

关于java - @LazyCollection(LazyCollectionOption.FALSE) 和@OneToMany(fetch = FetchType.EAGER) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com