2016-06-25 3 views
0

JPAとHibernateは、エンティティの取得と永続化に使用されます。 Userテーブルがあり、別のテーブルで表されるCountryが含まれています。ManyToMany/ManyToOne関係(JPA)で既存のエンティティを自動的に再利用

Userテーブルに新しいユーザーを追加します。この新しいユーザーは、既にCountryテーブルに挿入されている国からのものです。新規ユーザーを既存の国に割り当てるには、国オブジェクトをデータベースから取得してUserオブジェクトに設定することができます。これは期待どおりに機能し、ユーザーと既存の国との間に関係が作成され、Countryテーブルには新しい行は挿入されません。

JavaのJPAエンティティのCountryオブジェクトに設定した値だけで、Countryオブジェクトをデータベースから取得せずに同じ動作をさせることはできますか?私はコードがUSA(コードは、国テーブルの列に保存され、それが一意である)である国は、すでに存在する場合はJPA/Hibernateが自動的にチェックしたい

User user = new User("test user"); 
user.setCountry(new Country("USA")); 
entityManager.persist(user); 

:たとえば

データベース。存在する場合は、既存のCountryオブジェクトを使用して、データベース内の新しいエントリが作成されない場合は作成しません。新しいカントリーをCountryテーブルに挿入します。

ありがとうございました!

答えて

0

私はUserエンティティから、国に関する2つのマッピングを作成できると思います。

@Column
private string country_code;
および
@ManyToOne
@JoinColumn
私有国国;

あなただけがentityManager.refresh(ユーザー)を行うことができ、保存した後、セットアップに代わり、エンティティのCOUNTRY_CODEを必要とする新しいデータを保存する前に、それはあなた

ため@ManyToOneフィールドをロードしますので、私は

を推測
<code>User user = new User("test user"); 
user.setCountry_code("USA"); 
entityManager.persist(user); 
entityManager.refresh(user); 
関連する問題