我正在尝试使ManyToMany关联对所有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;
更新地点时,一切似乎都很好,
但是当我尝试创建 Activity 时,它也会尝试创建一个地点
=>这会导致主键冲突。
我有使用eclipse覆盖的hashcode()和equals()。
谢谢你的帮助。
请毫不犹豫地指向我显示和说明经过全面测试的ManyToMany关系的页面。
克里斯托弗
最佳答案
这是一个不错的example
只需尝试将他们那里拥有的内容复制到您自己的代码中,它应该可以工作。
如果仍然没有,请发布两个类的完整清单以及导致错误的代码,也许我可以看到问题所在。