2016-07-16 6 views
0

ように私はコメント地図OneToMany側には、所有者

我々は物理的な

手段を複製する必要がないものをdocumentation の以下の部分を理解することに苦労していますか?

insertable = false、updatable = falseを使用するポイントは何ですか?
お願いします。

所有側として1対多の側で、あなたがmappedBy要素を削除して挿入可能とfalseに更新可能として多くの 1に@JoinColumnを設定する必要があり、多くの双方向の1をマッピングします。この解決策 は最適化されておらず、いくつかの追加のUPDATEステートメントが生成されます。

@Entity 

public class Troop { 

    @OneToMany 

    @JoinColumn(name="troop_fk") //we need to duplicate the physical information 

    public Set<Soldier> getSoldiers() { 

    ... 

} 


@Entity 

public class Soldier { 

    @ManyToOne 

    @JoinColumn(name="troop_fk", insertable=false, updatable=false) 

    public Troop getTroop() { 

    ... 

} 
+0

'Soldier'クラスの別の' @ Column'で 'troop_fk'が参照されていますか? –

答えて

1

私たちは、HibernateはTroopエンティティとの接続にSoldierエンティティの列troop_fkにリンクすることを意味しています物理

を複製する必要があります。そして、TroopSoldierを結ぶ列の物理的な名前を書く必要があります。

insertable = false、updatable = falseを使用するポイントは何ですか?

Troopエンティティへの外部キーであり、制約のため編集できません。最初にTroopを作成し、その後にSoldierをこのTroopに追加します。

この例では、所有側がOneToMany側の場合約OneToManyマップなので、この側の関係はこの側が最初に作成されたものとみなします。 insertable=false, updatable=falseを削除できますが、DBに制約があり、新しいTroopオブジェクトでSoldierを作成しようとすると、Troopという新しいエンティティが存在しないため、制約違反エラーが発生する可能性があります。

+0

これらの注釈を使用しない場合:insertable = false、updatable = false? – GionJh

+0

@GionJh回答に追加 –

+0

ありがとう、本当に素晴らしい答え! – GionJh