2016-03-28 9 views
0

私はいくつかの休止状態の関係マッピングチュートリアルを完了しました。それは混乱の種です - 休止状態の関係。Hibernate Joinカラムの注釈は、どのテーブルcoulmnを参照しています

最初にexampleには、studentとdepartmentテーブルの両方にdepartment_idという名前の列があります。学生主体で

enter image description here

、部門エンティティで

@ManyToOne 
@JoinColumn(name="department_id") 
private Department department; 

、テーブルの列が参照@JoinColumnん

@OneToMany(mappedBy="department") 
private Set<Employee> employees; 
  1. deparmentテーブル/エンティティでdepartment_idの名前がidであると仮定した場合、参照はどのように行われますか?
  2. また、department_id列がStudentエンティティクラスの列として指定されていないのはなぜですか?二example

、私はSTUDENT_IDを使用してstudent_phoneへの接続中に(私が間違っているなら、私を修正)学生がStudent_Phoneを経由して電話に多くのものを必要とすることです。学生主体で

enter image description here

@OneToMany(cascade = CascadeType.ALL) 
@JoinTable(name = "STUDENT_PHONE", joinColumns = { @JoinColumn(name = "STUDENT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PHONE_ID") }) 
public Set<Phone> getStudentPhoneNumbers() { 
    return this.studentPhoneNumbers; 
} 

私の質問は、それがinverseJoinColumnを使用しているものです。私はinverseJoinColumnisが何とかPhoneテーブルに接続するのに使ったと思っています。しかし、私はしたい

  1. この逆接続はどのように行われますか?
  2. phone_id経由でstudent_phoneに接続するようにPhoneに依頼していますか?

上記の2つの例は参考用です。

persistence apiのように、ジョイン列は、マッピング・タイプに応じてターゲット表またはソース表fkを参照します。

マッピングの全体を理解するための簡単な方法があれば役に立ちます(例)。

+2

javadoc:http://docs.oracle.com/javaee/6/api/javax/persistence/JoinColumn.html#name%28%29でよく指定されています。特定のコードについて明確化が必要な場合は、その特定のコードを質問に投稿してください。リンクではありません。 –

+0

リンクありがとうございました。私は今それを通ります。 –

答えて

1

1) Which table's column does @JoinColumn refer to?

これは、従業員表の外部キー列を参照。

2) Suppose in department table/entity, department_id was named as id, then how will the referencing be done?

あなたは常に外部キー列名で行く、あなたの親テーブルにどのようにあなたの外部キーreferencesを休止状態には関係ありません。あなたはすでにそのマッピングを持っていますが、あなたがオブジェクト(Department)マッピングを持っているように

3) Also why is department_id column not specified as column in Employee entity class?

。それはORMのところです。列のオブジェクト型を参照しています。

2番目の例では、結合テーブルを使用しています(これは、最初の例のようにテーブルを結合することなく達成できます)、関係を所有しているユーザーを説明するだけで、非所有側はinverseJoinColumn、最初の例ではmappedByと同じです。

+0

joincolumnは常にソースクラスのfkを参照しますか? [hibernate api](http://docs.oracle.com/javaee/6/api/javax/persistence/JoinColumn.html#name%28%29)のように、joincolumnはターゲット表またはソース表fkを参照していますマッピングタイプに基づいています。 –

+1

あなたの場合、ソーステーブルによって異なります。それはターゲットエンティティのみに依存します。一方向多対多の場合、例: 'Department'は従業員の' Set'を持っていますが、 'Employee'は' Department'を持たず、 '@ JoinColumn'は'Department'クラスの' Set'にもあります。これは 'employee'テーブルの外部キー列を指します。 –

関連する問題