@ManyToMany关系不保存

时间:2016-03-26 18:18:13

标签: java hibernate jpa orm many-to-many

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

使用某些Driver模型执行保存Bus模型时,一切正常。表buses_drivers将所有键存储在那些实体中。但是在使用驱动程序保存Bus模型时,表格不会发生变化。我认为inverseJoinColmns映射存在问题。

3 个答案:

答案 0 :(得分:7)

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

  

拥有这种关系的领域。除非关系必须要求   是单向的。

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

答案 1 :(得分:2)

你一定要重新设计你的关系。

如果没有遇到当前保存方案的问题,使用双向@ManyToMany + CascadeType.ALL,您注定会遇到更多麻烦。

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

答案 2 :(得分:0)

保存后调用import { SearchBooks, SearchParameters } from './SearchBooks';

flush

session.setFlushMode(FlushMode.COMMIT);
session.save(user);
session.flush();