【问题标题】:Hibernate ManyToMany with Join table problems on update更新时出现连接表问题的休眠多对多
【发布时间】:2026-01-17 14:20:03
【问题描述】:

我正在尝试使多对多关联适用于所有 CRUD 操作。我有两个实体:PlacesEvents

一个地方可以举办多个活动,一个活动可以在多个地方举行。

在第一种情况下,我有

在 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()。

感谢您的帮助。

请不要犹豫,将我指向一个页面,其中显示并解释了一个完全有效且经过测试的多对多关系。

克里斯托弗

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    这是一个不错的example

    只需尝试将他们在那里的内容复制到您自己的代码中,它应该可以工作。 如果仍然没有,请发布两个类的完整列表以及导致错误的代码,也许我可以看到问题所在。

    【讨论】: