JPA @OneToMany + @JoinColumn 移除问题引用者的更新 table

JPA @OneToMany + @JoinColumn remove issues an update on referencer table

具有以下实体:

@Entity
class Car {
    @OneToMany(fetch = FetchType.LAZY, cascade = {})
    //@JoinColumn(name = "id_car")
    private Collection<Wheel> wheels;

@Entity
class Wheel {
    @JoinColumn(name = "id_car", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY, cascade = {}, optional = false)
    private Car idCar;

如果我保留第 4 行的注释,如上所示,系统会自动为我创建一个 join-table。但这不是我想要的,因为 Wheel 有它自己的领域 link。这就是为什么我取消注释第 4 行并且不再创建 join-table 的原因,这很好。但现在如果我这样做

entityManager.remove(myCar); // remove car with id=1

我看到底层系统调用,在实际删除之前,更新了以下 sql 语句:

Fine:   UPDATE wheel SET id_car = ? WHERE (id_car = ?)
bind => [null, 1]

这当然会导致我出现以下情况:

ERROR: null value in column "id_car" violates not-null constraint

如果我保留上面的注释,我会看到底层系统执行了两次删除:

Fine:   DELETE wheel WHERE id_car = ?
bind => [1]

Fine:   DELETE car WHERE id = ?
bind => [1]

这可能很好,当然它正在工作.. 即使我更喜欢底层 RDBMS 做它的工作,因为 id_car 是用 "on delete cascade" 规则定义的。问题仍然存在,因为创建了无用的附加连接-table。

问题是:我必须使用什么注释才能获得以下内容:

您应该在 OneToMany 注释中使用 mappedBy 属性来声明关系由 Wheel 的 idCar 字段映射 class:

@OneToMany(fetch = FetchType.LAZY, mappedBy="idCar", cascade = {})
private Collection<Wheel> wheels;