我的JPA实体具有如下列表:
@OneToMany(mappedBy = "scadaElement", orphanRemoval = true)
private List<ElementParameter> elementParameters;
和地图形式ElementParameter
@ManyToOne
@JoinColumn(name = "SCADAELEMENT_ID")
ScadaElement scadaElement;
当我获得带有elementParameters列表的实体并在其上执行流时,即使我使用.size()触发列表,但是当我使用for循环执行相同操作时,它也无济于事。
System.out.println("elements size: " + s.getElementParameters().size());
s.getElementParameters()
.stream()
.forEach(
a -> {
System.out.println("elementId: " + a.getId());
}
);
有什么解决方案可以使该流工作?我使用html" target="_blank">eclipselink作为JPA提供程序。
显然,您是指此问题。这些使用从实际实现(此处Vector
)继承的反模式的懒惰列表无法适应基类的发展。请注意,取决于如何实现反模式,有两种可能的结果
显然,第二种情况适用于您。触发列表填充不会使继承的forEach
方法起作用。请注意,此处通过配置关闭惰性填充可能是更简单的解决方案。
对我而言,最干净的解决方案是,如果现在IndirectList
继承AbstractList
Collection Collection
API并遵循Collection
API标准,则将近二十年Vector
(我应该提一下JPA实际上是多少?)。不幸的是,开发人员并没有走这条路。相反,通过创建另一个从该类继承的类来最大化反模式,该类已经从非继承设计类继承而来。该类重写Java
8中引入的方法,并且可能在下一Java版本中获得另一个子类。
因此,好消息是,开发者希望每一个List
是一个Vector
没有拿定主意,但坏消息是这是行不通的,因为有时候,你会不会使用JPA
2.6得到扩展的Java 8特定版本。但显然,JPA 2.7可以使用。
因此,您可以得出一些替代解决方案:
List<ElementParameter> workList=new ArrayList<>(elementParameters);
workList
将支持所有采集与流操作我有一个简单的查询很好地工作了一段时间,现在我将代码中的一些内容改为: (hibernate.cfg.xml) 和以下代码: 提交后,result对象不会加载列表(即从开始) 如果我执行在提交前,它会保持加载状态,而且,如果我使用它工作得很好。(但这不是它应该如何工作(让它在使用时打开并加载),createAlias应该一如既往地正常工作) 看起来DetachedCriteria的createAl
问题内容: 我想创建自己的集合,该集合具有python list的所有属性,并且还知道如何将自身保存到数据库中或从数据库中加载。我也想使负载隐式和惰性,因为在列表创建时它不会发生,而是等到第一次使用时才发生。 有没有一种单一的方法,我可以覆盖上加载任何列表属性(如第一次使用清单,,而不必重写他们… …等)? 问题答案: 不,没有。
问题内容: 好吧,我的疑问很简单:为了获得最佳性能,建议在我不需要使用的属性中始终使用惰性初始化(这很明显)。因此,请想象以下类: 在我的主类中,我将未初始化的具有“ type”属性的人称为“波纹管”: 因此,我从数据库中获得了一个简单的Person对象,并在控制台上打印了person类型。在这一刻,代理CGLIB可以发挥作用,并且可以发挥作用,一切正常。 但是,我在这里提出我的问题: 1-当我请
当然,这些列表有setter和getter。现在我想实现以用户身份不参加这些事件的可能性。因此,我尝试了以下方法: 我得到的例外情况如下: 尽管我使用了一些方法来确保执行惰性提取:
我谷歌了很多,这是真的奇怪的Spring Boot(最新版本)可能没有懒惰加载是不工作的。以下是我的代码片段: 我的资源: 我的服务: 编辑2: 对于规范构建,我有: