JPA2/Hibernate5とmySqlでjava 8を使用しています。Hibernate Merge with joined columns
+--------+ +----------------+ +------------+
| Rating | | Rating_Person | | Person |
+--------+ +----------------+ +------------+
| ID | | RAT_ID | | ID |
| PERSON | | PER_ID | | USERNAME |
+--------+ +----------------+ +------------+
私はPERSON
を目的としているエンティティRATING
を持っています。 merge
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]]
誰もが、私は新しい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;
しかし、次に起動します。
私はかかわらず、関連するPERSON
を取得する必要がありますRATING
実体をお読みください。