在使用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"/>