wang2222 2009-11-24 15:16 采纳率: 100%
浏览 270
已采纳

java级联时删除对象

有两个对象
user <------>role
一个role对应多个user

role对象
@OneToMany(cascade = {CascadeType.ALL})
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "roleId")
private Set userSet;

private Long id;
...略


user对象
private Long id;
private Long roleId;
....略

怎么删除一个user时不影响role得内容
望解答。
[b]问题补充:[/b]
但我删除时还是报错的
:deleted entity passed to persist
不知道怎么回事

  • 写回答

3条回答 默认 最新

  • jiangwenbo456 2009-11-24 19:19
    关注

    你的级联属性 为什么要设置all?
    cascade="all" 表示级联 插入 和 删除
    如果是all的话当然会把你的主表级联删除了
    应当配置为:
    cascade="save-update" 只级联插入和修改

    在一对多 或者 多对多 还有 一对一弱耦合
    这三种关系种 cascade最好都设置成为 save-update
    一般是很少设置成为all的
    除非是一对一的强耦合 就是共享主键的方式

    如果明白了上面所说的

    给你点小窍门

    在做删除操作的时候(cascade="save-update"的情况下)
    删除子表时候可以随便删除
    但是在删除主表的时候 如果在hbm.xml中 主表信息里提供了明确的子表外键信息 那么就可以删除 如果没有提供 需要手动在删除操作前把关系解除掉
    基于这两点 删除就没有问题了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?