0

我有以下课程:

学生 -

@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;

所以,我的电话表将有一个引用学生表的外键。现在,如果我进行创建,它适用于 Student 和 Phone 表中的每一行。

但是,如果我进行更新,比如稍后为学生添加一个 mname,它会在电话表中创建另一行,其数据与第一行相同,但现在第二行将引用电话表和第一行外键一片空白。

我想保持上述模式不变。我希望只有在真正发生变化时才在 Phone 表中创建该行。我怎样才能做到这一点?请指教。

谢谢

4

1 回答 1

0

它工作正常,你的@OneToMany关系是正确的。请务必Session.update(Object)在更新学生时使用该方法。

如果您Session.save(Object)在更新时使用,那么它将为学生创建一个新行id(您遇到的情况)。

如果您不想猜测是否必须插入或更新,您可以使用Session.saveOrUpdate(Object)方法让 Hibernate 决定是否必须插入或更新学生:它工作正常。只需确保您的学生具有正确的id集合,因为 Hibernate 将使用它来更新行。

于 2013-06-27T09:44:17.207 回答