各种属性设置 几乎都试过了,还是不行,找了很多 以下是 数据库Mysql5.0Demp表
demp_id int  主键 自增demo_name varcharEmp表emp_id 主键 自增emp_name varcharwaijian int 无申明
主表 Demp配置文件
<hibernate-mapping>
<class name="pojo.Demp" table="demp" catalog="hibnate_demo">
<id name="dempId" type="java.lang.Integer">
<column name="demp_id" />
<generator class="native" />
</id>
<property name="dempNames" type="java.lang.String">
<column name="demp_names" length="20" />
</property>
<set name="emp" inverse="true"  lazy="false" cascade="all" >
<key column="waijian"></key>
<one-to-many class="pojo.Emp" />
</set>
</class>   
</hibernate-mapping>  子表Emp
<hibernate-mapping>
<class name="pojo.Emp" table="emp" catalog="hibnate_demo">
<id name="empId" type="java.lang.Integer">
<column name="emp_id" />
<generator class="native" />
</id>
<property name="empNames" type="java.lang.String">
<column name="emp_names" length="20" />
</property>
<property name="waijian" type="java.lang.Integer">
<column name="waijian" />
</property>
<many-to-one name="demp" class="pojo.Demp" insert="false"
fetch="join" update="false">
<column name="waijian" />
</many-to-one>
</class>
</hibernate-mapping>使用的是 HibernateDaoSupportpublic class BaseDao  extends HibernateDaoSupport  {  public void save(Object obj){
getHibernateTemplate().save(obj);
}  
 
public void delete(Object obj){
getHibernateTemplate().delete(obj);
}  
}   public static void main(String[] args) { ApplicationContext conxt = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
Services dao = (Services) conxt.getBean("CardServices"); Demp demp = new Demp();
demp.setDempId(57);//删除id为57的信息
this.dao.delete(demp); 
 
}   这样只能删除 Demp主表,没级联 实在让我郁闷啊,大哥大姐们,好心人们,帮忙看看啊

解决方案 »

  1.   

    我觉得可能有两个地方导致不能级删,一是外键表引用主键表,另一个就是你在main方法中测试删除的时候是new了一个新Demp对象,这个对没有被Session管理,是一个Transient的,它的各属性除了编号,其它都没有赋值,也就是这个对象的Set里没有Emp
      

  2.   

    我觉得可能有两个地方导致不能级删,一是外键表引用主键表,另一个就是你在main方法中测试删除的时候是new了一个新Demp对象,这个对没有被Session管理,是一个Transient的,它的各属性除了编号,其它都没有赋值,也就是这个对象的Set里没有Emp
      

  3.   

    Demp demp = new Demp(); 
    demp.setDempId(57);//删除id为57的信息 
    this.dao.delete(demp); 很可能是这里的问题。先在数据库中找一个有的ID, 然后先用 ID load出来 然后把它delete了。session.delete( session.load(Demp.class , ID) );
      

  4.   

    还有 ,级联的时候 好像要在 many-to-one 的一段设置 lazy="false"
      

  5.   

    在主表关系映射文件中: 
    1)一端中对多端采取了延迟加载策略:lazy="true"默认 
    2)将多端的传播持久性(级联)设置为最全面的全部级联(包括孤儿模式):cascade="all-delete-orphan" 
    3)将维护关系的控制权交给多端:inverse="true" 在从表的关系映射文件中: 
    1)多端对一端采取了预先抓取策略:fetch="join"(并且要把一端主表映射文件的class标签的lazy属性设置为false) 
    2)将一端的传播持久性(级联)设置为存储、更新:cascade="save-update" 
      

  6.   

    cascade="all"   在一的一方设置
      

  7.   

    cascade="save-update" 
      没写吧   没写程序不知道 级联修改的吧 
      

  8.   

    public static void main(String[] args) { ApplicationContext conxt = new FileSystemXmlApplicationContext("classpath:applicationContext.xml"); 
    Services dao = (Services) conxt.getBean("CardServices"); Demp demp = new Demp(); 
    demp.setDempId(57);//删除id为57的信息 
    this.dao.delete(demp); }你这方法都没写完整~~怎么看啊
    而且主键设置的是自动增长你还给赋值
      

  9.   

    Demp demp = new Demp(); 
    demp.setDempId(57);//删除id为57的信息 
    this.dao.delete(demp);
    同意4楼兄弟的说法,你的代码里 delete删除的对象应该处于Persist状态 你自己new出来的Demp对象中 Set是没有属性的 那么你删除之后是不会删除关联对象的 
      

  10.   

    你new出来的只是瞬时对象,怎么级联删除?还有,自动增长的表,还要你自己赋值?