Hibernate Duplicate Row创建

时间:2013-06-27 04:11:55

标签: hibernate join mapping one-to-many duplicates

我有以下课程:

学生 -

@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表中创建行。我怎样才能做到这一点?请指教。

由于

1 个答案:

答案 0 :(得分:0)

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

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

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