//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"

解决方案 »

  1.   

    "delete from FaInfo where faId=?"
    这样是不行的,因为hibernate会无法维护持久化对象的状态。需要级联删除的话,必须先load,再delete,
    Object obj=session.load(FaInfo.class,faId);
    session.delete(obj);或者发送2条sql,先删除子,再删父,然后清除缓存sessionFactory.evit(FaInfo.class)
      

  2.   

    取消数据库建立的时候的那个外键链接   通过 hibernate 的外键连接就可以达到级联删除了否则,你完全可以不用hibernate 的级联 就可以做到级联删除 
    sqlserver 里面有这个级联删除的功能
      

  3.   

    saro 正解,建议使用 
    Object obj=session.get(FaInfo.class,faId);
      

  4.   

    Saro(这也不是江水,这是二十年流不尽的英雄血。) 
    正解,给分
      

  5.   

    其中Test是一个实体类,只有id和name两个属性public Test getTestFromSession() {
            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 里面有这个级联删除的功能
    你是指写个触发器完成吧