Я использую java 8 с JPA2/Hibernate5 и mySql.Ошибка слияния гибернации со связанной колонкой
+--------+ +----------------+ +------------+
| Rating | | Rating_Person | | Person |
+--------+ +----------------+ +------------+
| ID | | RAT_ID | | ID |
| PERSON | | PER_ID | | USERNAME |
+--------+ +----------------+ +------------+
У меня есть объект RATING
, который имеет PERSON
объект. Когда я попробую RATING
, он получает сообщение об ошибке, поскольку в базе данных уже есть PERSON
с уникальным значением столбца USERNAME
.
entityManager.merge(rating);
Я получаю следующее сообщение об ошибке:
Duplicate entry 'richardmarais' for key 'USERNAME_UNIQUE'
Похоже, мне нужно, чтобы не попробовать и добавить новый PERSON
. Мне не нужно даже обновлять PERSON
.
Я попытался обновить мой код:
Person person = rating.getPerson();
Person dbPerson = personService.findByUserName(person.getUserName());
if (dbPerson != null) {
rating.setPerson(dbPerson);
}
entityManager.merge(rating);
Но я получаю:
There was an error trying to save Rating [null]. Multiple representations of the same entity [com.jobs.spring.domain.Person#8] are being merged. Detached: [[email protected]]; Managed: [[email protected]]
Может кто-нибудь пожалуйста, сообщите мне, как я могу добавить новый 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;
Но тогда при запуске я получаю.
Когда я прочитал RATING
лицо мне нужно, чтобы получить соответствующий PERSON
хотя.