我正在使用带有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);
我收到以下错误:
重复录入' richardmarais'关键字' USERNAME_UNIQUE'
看起来我不需要尝试添加新的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]
有人可以告诉我如何在不添加新RATING
的情况下添加新的PERSON
吗?
我尝试在@Column
对象上添加PERSON
注释,告诉它不要添加新的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
。
答案 0 :(得分:0)
如果我先设置已连接的实体,则可以正常工作。
Person person = personDao.findById(rating.getPerson().getId());
Job job = jobDao.findById(rating.getJob().getId());
rating.setPerson(person);
rating.setJob(job);
rating = super.merge(rating);