@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 在维护关联时只会检查该方。
我有一些实体具有@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 在维护关联时只会检查该方。