我正在尝试使ManyToMany关联对所有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;

更新地点时,一切似乎都很好,
但是当我尝试创建 Activity 时,它也会尝试创建一个地点
=>这会导致主键冲突。

我有使用eclipse覆盖的hashcode()和equals()。

谢谢你的帮助。

请毫不犹豫地指向我显示和说明经过全面测试的ManyToMany关系的页面。

克里斯托弗

最佳答案

这是一个不错的example

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

08-04 03:09