我有以下课程:
学生 -
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String fName;
private String lName;
private String mName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private Set<Phone> phones;
电话
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int phoneId;
private int phoneNumber;
因此,我的Phone表将有一个引用Student表的外键。现在,如果我进行创建,它可以与Student和Phone表中的每一行一起使用。
但是,如果我稍后为学生做更新,比如说添加一个mname,它会在电话表中创建另一行,其数据与第一行相同,但现在第二行将引用电话表row外键为null。
我希望保持上述架构不变。我希望只有在真正发生变化时才能在Phone表中创建行。我怎样才能做到这一点?请指教。
由于
答案 0 :(得分:0)
它工作正常,你的@OneToMany
关系是正确的。请务必在更新学生时使用Session.update(Object)
方法。
如果您在更新时使用Session.save(Object)
,那么它会为学生创建一个新行id
(您遇到的情况)。
如果您不想猜测是否必须插入或更新,可以使用Session.saveOrUpdate(Object)
方法让Hibernate决定是否必须插入或更新学生:它可以正常工作。请确保您的学生具有正确的id
集,因为Hibernate将使用它来更新行。