本帖最后由 jmonian 于 2011-12-25 01:35:39 编辑

解决方案 »

  1.   

    多对一的特殊情况啊,不是很了解,应该是没设置主控方 (inverse)
      

  2.   


    初学SSH 框架 不是很了解呐。 inverse 一开始在set上有加过。 不管设为true还是false 都是一样的呐。
      

  3.   

    在实体类上加关联关系的时候,有一个注解是cascade
    @cascade()好像是这个,把他的设置成cascadeType.REFRESH其他不要,这样试试
      

  4.   

    在Cost这个实体的对应映射文件里配置cascade=false,就不会级联删除了。
    欢迎加入java爱好者群:46918907
      

  5.   


    我试过了耶。不管是设置成 true 还是 false 都是一样。所以后来被我删了哈
      

  6.   


    cascade=false 这样的话。项目发布的时候就会报错了 
      

  7.   

    你的两个表之间的关联关系弄错了吧 
    一个用户有多个收支情况
    User.hbm.xml:
    里面应该是 <set>...</set>
    Cost.hbm.xml:
    里面应该是<many-to-one>...<many-to-one>
    这样你删一个cost应该就没事了cascade的取值好像是 none,all,save-update,delete
      

  8.   

    楼主的映射关系都写错了
    User.hbm.xml:<many-to-one name="cost" class="financesj.center.dao.entity.Cost" update="false" insert="false" fetch="select" >
                <column name="Id" not-null="true" unique="true" />
    </many-to-one>User这端相对于Cost是一对多的关系,应该用one-to-manyCost.hbm.xml:
     
            <set name="users" cascade="save-update" >
                <key>
                    <column name="Id" not-null="true" unique="true" />
                </key>
                <one-to-many class="financesj.center.dao.entity.User" />
            </set>Cost这一端相对于User,多对一的关系,应该用many-to-one
      

  9.   

    首先将外键关系的维护交给多方,cascade=true.
    在删除的时候想只删除当前的cost信息,传入cost对象,但在之前还有一个删除cost与user对象之间的关系的动作set.remove(cost).将当前的cost对象从集合对象中移除掉。
    再来执行删除应该就会成功了吧.
      

  10.   

    首先你的映射关系搞浑了、应该是一个user对应多个cost(many-to-one),然后将casecade设为false,这样应该就没问题了吧