我有一些@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
映射存在问题。
答案 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();