Java 临时强制LazyInitializationExceptions

Java 临时强制LazyInitializationExceptions,java,hibernate,lazy-initialization,Java,Hibernate,Lazy Initialization,传统上,我们试图避免lazyiinitializationexceptions。但是,我需要暂时允许它们被抛出。这是我要做的工作的伪代码: Session session = ...; Customer customer = (Customer) session.get(Customer.class, 56); // All eagerly fetched data is now in memory. disconnectSession(session); // Attempts to

传统上,我们试图避免
lazyiinitializationexception
s。但是,我需要暂时允许它们被抛出。这是我要做的工作的伪代码:

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);
magicallyserializationdatacurrentlynmemory
方法递归地尝试序列化
customer
及其相关实体的内存数据,同时吸收
LazyInitializationException
s

尝试#1:
会话。断开
/
会话。重新连接
在这次尝试中,我使用了以下模式:

Connection connection = session.disconnect();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);
Connection connection = session.close();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);
不幸的是,它没有抛出
LazyInitializationException
s

尝试#2:
会话。关闭
/
会话。重新连接
在这次尝试中,我使用了以下模式:

Connection connection = session.disconnect();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);
Connection connection = session.close();

magicallySerializeDataCurrentlyInMemory(customer);

session.reconnect(connection);
不幸的是,这使得
会话
会话后无效。重新连接(连接)


如何临时强制执行
LazyInitializationException
s?

无法临时关闭会话。您可以做的是从会话中删除实体,然后将其放回

session.evict(customer);
//do something will throw lazy load
session.refresh(customer);
连接和重新连接只需手动管理正在使用的特定JDBC连接。hibernate会话是一个比单个JDBC连接更大的概念。连接只是它的一种资源。它可以在其整个生命周期中使用许多不同的物理数据库连接,一点也不在乎。如果您断开连接,然后要求会话执行某些操作,它只会转到另一个连接