如何使用JPA(eclipselink)

时间:2016-03-29 12:10:08

标签: jpa many-to-many eclipselink

我需要使用基本密钥和实体值来持久保存地图。这运行,如果我不尝试两次添加相同的第二个实体:

@ManyToMany
@JoinTable(name="THIRD_TABLE")
@MapKeyColumn(name="INTEGER_COLUMN", table="THIRD_TABLE")
private Map<Integer, SecondEntity> secondEntities = new HashMap<>();

但是如果我尝试(year1:secondE_1,year2:secondE_1)我的应用程序会抛出这个:

java.sql.SQLException: Violation of unique constraint SYS_PK_294: 
duplicate value(s) for column(s) FIRSTENTITY_ID,SECONDENTITY_ID in statement [INSERT INTO COVERANALYSIS_EXPENSERECORDSETS (secondentity_id, firstentity_id, INTEGER_COLUMN) VALUES (?, ?, ?)]
Error Code: -104

似乎mapkey没有按原样使用。我已尝试过其他一些注释和无休止的谷歌搜索,但似乎没有任何效果。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

这是EclipseLink中的一个错误报告。

Bug 344448 - wrong mapping of java.util.Map

Hibernate处理好了。

答案 1 :(得分:0)

最后我在其间安装了一个交叉帮助对象。

FirstEntity逆映射列表:

@OneToMany(mappedBy="firstEntity", cascade = CascadeType.ALL)
private List<SecondEntityJunction> secondEntities;

SecondEntityJunction包含父键,年份和第二个实体FK:

@ManyToOne
private FirstEntity firstEntity;
private int year;
private SecondEntity secondEntity;

是的。