【发布时间】:2026-01-17 14:20:03
【问题描述】:
我正在尝试使多对多关联适用于所有 CRUD 操作。我有两个实体:Places 和 Events。
一个地方可以举办多个活动,一个活动可以在多个地方举行。
在第一种情况下,我有
在 PlaceDto 类中
@ManyToOne(
targetEntity=EventDto.class,
cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(
name = "EVENTS_PLACES",
joinColumns = { @JoinColumn(name = "PLACE_ID") },
inverseJoinColumns = { @JoinColumn(name = "EVENT_ID") })
private List<EventDto> events;
在 PlaceDto 类中:
@JoinTable(name = "EVENTS_PLACES", joinColumns = @JoinColumn(name = "EVENT_ID"), inverseJoinColumns = @JoinColumn(name = "PLACE_ID"))
private List<PlaceDto> places;
在这种情况下,更新地点时,地点与其事件之间的链接被删除
用DELETE FROM EVENTS_PLACES where ...声明
第二种情况
所以在阅读了一些文档后,我将 PlaceDto 更改为
@ManyToMany (
mappedBy = "events",
cascade = { CascadeType.PERSIST, CascadeType.MERGE },
fetch = FetchType.LAZY,
targetEntity = FundDto.class)
private List<PlaceDto> places;
更新地点时,一切似乎都很好,
但是当我尝试创建一个活动时,它也会尝试创建一个地方
=> 这会导致主键违规。
我使用 eclipse 覆盖了 hashcode() 和 equals()。
感谢您的帮助。
请不要犹豫,将我指向一个页面,其中显示并解释了一个完全有效且经过测试的多对多关系。
克里斯托弗
【问题讨论】: