表格:学生,地址
Student.ADDR_ID列映射到Address.ID

我的学生班级的注释如下

public class Student {

String name, surname;
int rollNumber;
Teacher classTeacher;
Address address;

@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ADDR_ID")
public Address getAddress() {
    return address;
}
:
:


在创建和更新案例中,它工作正常。

如果我将学生的地址更改为新地址,则会创建新行,但不会删除旧地址的行。
如果我将地址设置为null仍然不会删除

例如

 Student s1 = session.get(Student.class, 24);
 Address addr = new Address();
 session.save(addr);
 s1.setAddress(addr);
 session.save(s1);

 or

 Student s1 = session.get(Student.class, 24);
 s1.setAddress(null);


我已经设置了所有的层叠。需要做哪些额外/不同的事情。逆适用于此吗?

最佳答案

如果您足够,则应使用orphanremoval = true

@OneToOne(cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="ADDR_ID")
public Address getAddress() {
}

关于java - hibernate 一对一映射。从相关表中删除行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44125432/

10-13 09:10