gpt4 book ai didi

java - 暂时强制 LazyInitializationExceptions

转载 作者:行者123 更新时间:2023-12-01 15:27:22 26 4
gpt4 key购买 nike

传统上,我们会尝试避免 LazyInitializationException。但是,我需要暂时允许它们被抛出。这是我想要做的伪代码:

Session session = ...;

Customer customer = (Customer) session.get(Customer.class, 56);

// All eagerly fetched data is now in memory.

disconnectSession(session);

// Attempts to access lazy data throw LazyInitializationExceptions.
// I want to take advantage of this fact to *only* access data that
// is currently in memory.

magicallySerializeDataCurrentlyInMemory(customer);

// Now that the in-memory data has been serialized, I want to re-connect
// the session.

reconnectSession(session);

magicallySerializeDataCurrentlyInMemory 方法递归地尝试序列化 customer 及其相关实体的内存中数据,并在此过程中吸收 LazyInitializationException

尝试#1:session.disconnect/session.reconnect

在这次尝试中,我使用了这种模式:

Connection connection = session.disconnect();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);

不幸的是,它没有抛出LazyInitializationException

尝试#2:session.close/session.reconnect

在这次尝试中,我使用了这种模式:

Connection connection = session.close();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);

不幸的是,这使得 sessionsession.reconnect(connection) 之后变得无用。

我如何暂时强制LazyInitializationException

最佳答案

没有办法暂时关闭 session 。您可以做的就是从 session 中删除实体,然后将其放回去。

session.evict(customer);
//do something will throw lazy load
session.refresh(customer);

连接和重新连接只需手动管理正在使用的特定 JDBC 连接。 hibernate Session 是一个比单个 JDBC 连接更大的概念。连接只是它的一个资源。它可以在整个生命周期中使用许多不同的物理数据库连接,而不关心一点。如果您断开连接然后要求 session 执行某些操作,它只会获取另一个连接。

关于java - 暂时强制 LazyInitializationExceptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9999098/

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