gpt4 book ai didi

hibernate:LazyInitializationException:无法初始化代理

转载 作者:行者123 更新时间:2023-12-02 22:14:20 27 4
gpt4 key购买 nike

这是一个让我困惑的问题。我正在尝试实现基本的 Hibernate DAO 结构,但遇到了问题。

这是基本代码:

int startingCount = sfdao.count();
sfdao.create( sf );
SecurityFiling sf2 = sfdao.read( sf.getId() );
sfdao.delete( sf );
int endingCount = sfdao.count();

assertTrue( startingCount == endingCount );
assertTrue( sf.getId().longValue() == sf2.getId().longValue() );
assertTrue( sf.getSfSubmissionType().equals( sf2.getSfSubmissionType() ) );
assertTrue( sf.getSfTransactionNumber().equals( sf2.getSfTransactionNumber() ) );

它在第三个断言 True 上失败,它尝试将 sf 中的值与 sf2 中的相应值进行比较。这是异常(exception)情况:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at com.freightgate.domain.SecurityFiling_$$_javassist_7.getSfSubmissionType(SecurityFiling_$$_javassist_7.java)
at com.freightgate.dao.SecurityFilingTest.test(SecurityFilingTest.java:73)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:40)

最佳答案

问题是您正在尝试访问 detached 对象中的集合。 。在将集合访问到当前 session 之前,您需要重新附加对象。您可以通过以下方式做到这一点

session.update(object);

使用lazy=false不是一个好的解决方案,因为您放弃了hibernate的延迟初始化功能。当lazy=false时,集合会在请求对象的同时加载到内存中。这意味着,如果我们有一个包含 1000 个项目的集合,无论我们是否要访问它们,它们都将加载到内存中。这不好。

请阅读此article它解释了问题、可能的解决方案以及为什么这样实现。另外,要了解 session 和事务,您必须阅读 this other article .

关于hibernate:LazyInitializationException:无法初始化代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/345705/

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