当前位置:编程学习 > JAVA >>

Hibernate 一对多 双向关联 修改的问题

public class School{
@Id
private int id;
@OneToMany(mappedby="school",casecade = CasecadeType.ALL,orphanRemoval=true)
private Set<Student> students;
........
}

public class Student{
@Id
private int id;
@ManyToOne
private School school;
........
}

//
Set<Student> students;
students.add(*);//加载新的Student集合
school.set(students);
school.merge();



更新后出现一个问题,school原来的students集合没有删除,只增加了新的students集合,是不是需要merge()前先delete students原集合? --------------------编程问答-------------------- --------------------编程问答-------------------- 你是说你的school表中又多了一条数据,除非你操作的school对象是你自己重新实例化的 --------------------编程问答-------------------- hibernate3.0以上使用merge()来合并两个session中的同一对象 --------------------编程问答-------------------- merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理:

当ID在数据库中不能找到时,用update的话肯定会报异常,然而用merge的话,就会insert。

当ID在数据库中能找到的时候,update与merge的执行效果都是更新数据,发出update语句;

如果没有设置ID的话,则这个对象就当作瞬态处理:

用update的话,由于没有ID,所以会报异常,merge此时则会保存数据,根据ID生产策略生成一条数据;
--------------------编程问答-------------------- 顶二楼
你的 --------------------编程问答-------------------- 应该由Set<Student> students=school.getStudents();得到
而不是 Set<Student> students;=new HashSet<Student>();
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,