//PaperInfo.hbm.xml中<many-to-one name="faInfo" class="com.yixing.data.po.FaInfo" not-null="true" fetch="select">
<column name="fa_id" />
</many-to-one>也加上级联关系 cascade="delete"
<column name="fa_id" />
</many-to-one>也加上级联关系 cascade="delete"
这样是不行的,因为hibernate会无法维护持久化对象的状态。需要级联删除的话,必须先load,再delete,
Object obj=session.load(FaInfo.class,faId);
session.delete(obj);或者发送2条sql,先删除子,再删父,然后清除缓存sessionFactory.evit(FaInfo.class)
sqlserver 里面有这个级联删除的功能
Object obj=session.get(FaInfo.class,faId);
正解,给分
Session session = HibernateSessionFactory.currentSession();
Transaction tx = session.beginTransaction();
Test test = (Test) session.load(Test.class, new Integer(1)); //如果用get方法就不报错
//Test test = (Test) session.get(Test.class, new Integer(1));
tx.commit();
session.close();
return test;
}public void printTest() {
Test test = this.getTestFromSession();
System.out.println(test.getName());
}在调用printTest()方法会出现如下错误,如果getTestFromSession() 方法中使用get方法则不报错
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:53)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at pack.Test$$EnhancerByCGLIB$$48a292b9.getName(<generated>)
at BusinessService.printTest(BusinessService.java:20)
at BusinessService.main(BusinessService.java:27) load()方法时,Load()会返回一个未初始化的代理,直到调用该代理的方法(getName())时才会去访问数据,你的程序在调用getName()时Session已关闭,所以抛出异常
而Get()方法在调用时会立即访问数据库加载对象,所以不会出现类似的问题 顺便问一下sqlserver 里面有这个级联删除的功能
你是指写个触发器完成吧