我有问题,我找不到解决方案。我有双向多对多的诠释。我在DB(MariaDB的)这个表:JPA ManyToMany双向插入
- 项目
- 部分
- item_section
项目部分:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "item_section",
joinColumns = {
@JoinColumn(name = "item", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "section", nullable = false, updatable = false)})
private Set<Section> sections;
科部分:
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "sections")
private Set<Item> items;
问题:
我先创建一些章节。比我想在本节创建项目“内”。所以我创建Item的实例并添加一些现有的节到集(我从DAO得到的部分)。如果我坚持该项目,创建项目和item_section表格中的记录。但是,如果我从DAO中得到一些受影响的部分并遍历项目集数据库更改不在此处,则部分实例与插入之前处于相同状态。
我错了什么?
PS:我使用的EclipseLink,但我不认为这是有趣的
SOLUTION
正如@克里斯说,我叫utimately坚持,但方向的一侧已经存在。没有定义级联,所以在坚持部分没有坚持也没有合并。所以我staless和JTA的解决方案最好的解决办法是使用合并,而不是坚持下去的项目,并添加合并级联部分集合...谁前来帮忙,但尤其是@克里斯
你打算设置关系的两边吗?由于您没有提供持久性代码,因此不可能有进一步的评论。 –
谢谢@NeilStockton,但你想要什么持久性代码?我只需做entityManager.persist(item),其中entityManager是EntityManager的实例,item是Item的实例。你是什么意思“_ \t 你是否打算设置关系的两边?_”我已经设定他们都不是我? – Majlanky
由于您没有发布持久性代码(您只发布了类),因此没有人可以说您是否设置了关系的两侧(在要保留的对象中)。所以你打电话坚持“项目”......你打电话坚持另一个对象(部分)?没有人可以评论,直到你做 –