@ManyToMany关系不保存

Vla*_*dys 3 java orm many-to-many hibernate jpa

我有一些@ManyToMany关系的实体:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "buses_drivers",
        joinColumns = @JoinColumn (name = "driver_id_inner", referencedColumnName = "driver_id"),
        inverseJoinColumns = @JoinColumn (name = "bus_id_inner", referencedColumnName = "bus_id"))
private List<Bus> buses;
Run Code Online (Sandbox Code Playgroud)

@ManyToMany(mappedBy = "buses", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Driver> drivers;
Run Code Online (Sandbox Code Playgroud)

Driver用某些Bus型号执行保存模型时,一切正常.表buses_drivers存储这些实体的所有键.但是当Bus使用驱动程序保存模型时,表格不会更改.我认为inverseJoinColmns映射问题.

Dra*_*vic 9

这是预期的行为.在双向多对多关联中,一方必须是反方.在你的情况下,它是Bus侧面,因为它包含mappedBy:

拥有这种关系的领域.除非关系是单向的,否则是必需的.

这意味着它Driver是关联的所有者,而Hibernate只会在维护关联时检查该方.


Mas*_*ave 6

你绝对应该重新设计你们的关系。

甚至没有进入当前保存场景的问题,使用双向@ManyToMany+ CascadeType.ALL,你注定会遇到更多麻烦。

例如,删除一个bus会因级联而删除其所有驱动程序,再次级联将删除其所有总线。你基本上最终会删除比你想要的更多的东西。此外,检查这些映射生成的 SQL,您很可能会注意到它远非理想。