@Entity
@Table(name="Student")
public class Student {
private String id;
private String firstName;
private String lastName;
private Set<Grade> grades = new HashSet<Grade>();
public void addGrade(Grade grade){
grades.add(grade);
}
//rest of Getters and setters omitted
public void removeGrade(Grade grade){
grades.remove(grade);
}
@OneToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoval=true)
@JoinColumn(name="s_id")
public Set<Grade> getGrades() {
return grades;
}
等级:休眠 - 更新操作:
@Entity
@Table(name="Grade")
public class Grade {
//all omitted
}
我有对象的学生,我想从收集的分级对学生的ID为“XYZ”
我取出一个现有等级在做以下操作:
String id = "xyz";
Session session = sessionFactory.getCurrentSession();
Student student = (Student)session.load(Student.class,id);
student.removeGrade(grade);
session.update(student);
一切完美的作品,但在SQL查询中,我看到了怪异的更新:
Hibernate: select student0_.id as id0_0_, student0_.FirstName as FirstName0_0_, student0_.LASTNAME as LASTNAME0_0_ from Student student0_ where student0_.id=?
Hibernate: select grades0_.s_id as s4_0_1_, grades0_.id as id1_, grades0_.id as id1_0_, grades0_.FirstQuestion as FirstQue2_1_0_, grades0_.TotalGrade as TotalGrade1_0_ from Grade grades0_ where grades0_.s_id=?
Hibernate: update Grade set s_id=null where s_id=? and id=?
Hibernate: delete from Grade where id=?
为什么要更新? update Grade set s_id=null where s_id=? and id=?
如何跳过它以提高性能?
对不起,但我没有得到它。为什么我有无用的更新?我想在关系中断时删除Grade对象,但我不想在删除之前更新。 – 2011-06-14 20:26:34
@ danny.lesnik,我更新了我的答案。除非你能证明它是一个性能瓶颈,否则我不会担心它。重要的是要了解*为什么会发生。 – hvgotcodes 2011-06-14 21:37:43