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连接更大的概念。连接只是它的一种资源。它可以在其整个生命周期中使用许多不同的物理数据库连接,一点也不在乎。如果您断开连接,然后要求会话执行某些操作,它只会转到另一个连接