在使用hibernate时报错
org.hibernate.LazyInitializationException: could not initialize proxy [com.myxq.domain.Customer#28] - no Session
at com.myxq.domain.Customer$HibernateProxy$6gPsuLG8.toString(Unknown Source)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at com.myxq.domain.Linkman.toString(Linkman.java:26)
at java.lang.String.valueOf(String.java:2994)
at java.io.PrintStream.println(PrintStream.java:821)
at com.myxq.test.HibernateTest.test2(HibernateTest.java:61)
代码如下

@Test
    public void test2(){
        Session currentSession = HibernateUtil.getCurrentSession();
        Transaction transaction = currentSession.beginTransaction();
        Linkman linkman=currentSession.get(Linkman.class,28L);
        transaction.commit();
        System.out.println(linkman);
    }

这是为什么呢,原因是hibernate内部使用了懒加载的方式,是在用到这个值的时候才回去加载,因为输出语句卸载transaction.commit();之后事务已经提交.所以再去查询的时候session已经消失.如果想要关闭懒加载,可以在相对应的属性后面加上lazy="false",执行的时候就会自动查询出关联的数据.
<many-to-one name="customer" cascade="save-update" class="com.myxq.domain.Customer"
column="link_cust_id" lazy="false"/>

Last modification:April 24, 2022
如果觉得我的文章对你有用,请随意赞赏