【发布时间】:2017-01-10 12:58:13
【问题描述】:
我正在使用带有 JPA2/Hibernate5 和 mySql 的 java 8。
+--------+ +----------------+ +------------+
| Rating | | Rating_Person | | Person |
+--------+ +----------------+ +------------+
| ID | | RAT_ID | | ID |
| PERSON | | PER_ID | | USERNAME |
+--------+ +----------------+ +------------+
我有一个实体RATING,它有一个PERSON 对象。当我尝试merge RATING 时,它会出现错误,因为数据库中已经有一个 PERSON 具有唯一列值 USERNAME。
entityManager.merge(rating);
我收到以下错误:
键“USERNAME_UNIQUE”的重复条目“richardmarais”
看来我不需要尝试添加新的PERSON。我什至不需要更新PERSON。
我尝试将我的代码更新为:
Person person = rating.getPerson();
Person dbPerson = personService.findByUserName(person.getUserName());
if (dbPerson != null) {
rating.setPerson(dbPerson);
}
entityManager.merge(rating);
但我明白了:
尝试保存评级 [null] 时出错。多种的 同一实体的表示 [com.jobs.spring.domain.Person#8] 正在合并。分离:[com.jobs.spring.domain.Person@30466c01]; 托管:[com.jobs.spring.domain.Person@7c2ba1a2]
谁能告诉我如何在不添加新的PERSON 的情况下添加新的RATING?
我尝试在PERSON 对象上添加@Column 注释,告诉它不要添加新的PERSON。
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable
(
name="rating_person",
joinColumns={ @JoinColumn(name="RAT_ID", referencedColumnName="ID") },
inverseJoinColumns={ @JoinColumn(name="PER_ID", referencedColumnName="ID") }
)
@Column(insertable = false, updatable = false)
private Person person;
但是在启动时我得到了。
@ManyToOne 属性上不允许使用@Column: com.jobs.spring.domain.Rating.person
当我阅读RATING 实体时,我确实需要获取关联的PERSON。
【问题讨论】:
标签: java mysql hibernate jpa orm