2016-09-02 6 views
1

JPA2/Hibernate5とmySqlでjava 8を使用しています。Hibernate Merge with joined columns

+--------+ +----------------+ +------------+ 
| Rating | | Rating_Person | | Person  | 
+--------+ +----------------+ +------------+ 
| ID  | | RAT_ID   | | ID   | 
| PERSON | | PER_ID   | | USERNAME | 
+--------+ +----------------+ +------------+ 

私はPERSONを目的としているエンティティRATINGを持っています。 mergeRATINGを試すと、すでにデータベースに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実体をお読みください。

答えて

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); 
関連する問題