gpt4 book ai didi

java - Hibernate 和 Spring,加载处于惰性模式的集合

转载 作者:行者123 更新时间:2023-11-29 06:06:26 25 4
gpt4 key购买 nike

我正在使用 Spring 通过 @Transactional 注释管理我的服务层中的事务。这对于预加载集合来说很好,但对于延迟加载是不利的。

我不能使用 OSV 模式,我的应用程序是一个独立的桌面客户端应用程序。

所以我想到了一个解决方案,这就是我尝试做的:

public abstract class TransactionTask {

public TransactionTask() {
}

public abstract void job();
}

在我的服务中,我有:

@Transactional
public void doJob(Transactiontask tt){
tt.job();
}

我的使用方式是:

myService.doJob(new TransactionTask() {

@Override
public void job() {
//lazy code here
}
});

我希望看到此代码有效,因为 session 在 doJob 方法中打开(它被标记为事务性),但它不起作用...异常是没有 session 或 session 已关闭。为什么此代码不起作用,以及如何仅在需要时加载集合?

我不想写一个带有指定方法的服务来加载集合,那不是解决方案。

最佳答案

延迟加载不仅需要 session ,还需要 您的Entity 附加到的 session 。在尝试访问惰性字段之前,您需要将对象附加到由 @Transactional 创建的新 session 。

此外,虽然您显然不能使用可用的 OSIV servlet 过滤器之一,但“模式”仍然有效。必须有一些可定义的范围,您可以将 session 的生命周期耦合到该范围。 (它可能被证明是如此之大以至于有其他挑战使其不值得付出努力,但它仍然是一个选择。)

关于java - Hibernate 和 Spring,加载处于惰性模式的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393234/

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