@ManyToMany 关系不保存

@ManyToMany relation not save

我有一些实体具有@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;

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

当用一些Bus模型执行保存Driver模型时,一切正常。表 buses_drivers 存储那些实体的所有键。但是当用驱动程序保存 Bus 模型时,table 不会改变。我认为 inverseJoinColmns 映射有问题。

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

即使不考虑当前保存方案的问题,使用双向 @ManyToMany + CascadeType.ALL,你注定会遇到更多麻烦。

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

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

The field that owns the relationship. Required unless the relationship is unidirectional.

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