- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对“延迟加载”有一个疑问。使用 @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/
我想显示一个表,其中包含我数据库的所有用户。该表还应包含用户对象中包含的列表的元素数。因为我只需要大小/数量,所以我想阻止获取整个列表。因此,我正在使用 LazyCollectionOption.EX
我有一个实体,其中一个字段用 @LazyCollection(LazyCollectionOption.FALSE) 注释。我不能(不允许)改变这一点。是否可以通过 @FetchProfile 覆盖它
我对“延迟加载”有一个疑问。使用 @LazyCollection(LazyCollectionOption.FALSE) 和 @OneToMany(fetch = FetchType.EAGER) 有
我是一名优秀的程序员,十分优秀!