2

休止状態のドキュメントに従って、休止状態チームは、結合テーブルなしで 1 対多の一方向マッピングを使用しないことを強くお勧めします。これはパフォーマンスの問題によるものなのか、それとも他の理由があるのか​​ を知りたいです。

多くの電話番号を持つことができる従業員がいる場合、このマッピングを取得するには

@Entity
public class Employee { 
...
 @OneToMany
 @JoinColumn(name="employee_fk")
 public List<Phone> phones;
 ...
 }

@Entity
public class Phone { 
...
}

Hibernate は外部キーを使用して電話テーブルを生成するので、ここで問題は発生しません。また、電話クラスに従業員のプロパティを持たせたくありません。Hibernate チームは、このような場合に結合テーブルを使用することをお勧めしますが、なぜ不必要に 1 つのテーブルを作成する必要があるのでしょうか?

4

2 に答える 2

2

単方向マッピングの場合、HibernateはDBに2回ヒットします。

同じ従業員のジョンの新しい電話の場合、それはこのようなことをします

新しい電話番号をphnnoテーブルに挿入します

phnnoテーブルのこのphnnoで従業員ID(john)を更新します

さらに、電話の永続性クラスをマップし、特定の従業員に登録する必要があります。そうしないと、電話のクラスが再利用されます。これは、やりたくないと思います。

于 2012-09-12T10:04:08.603 に答える
2

これは、パフォーマンスの問題というよりも設計の問題です。Phone が割り当てられた従業員について認識していないと考える場合、これは Phone エンティティが Employee エンティティから独立していることを意味します。また、従業員エンティティから独立している場合、そのテーブルは従業員テーブルへの外部キーを持つべきではありません。

さらに、Phone はその従業員について知らないため、再利用される可能性があり、他の種類のエンティティ (会社、顧客など) に関連付けられる可能性があることを意味します。電話テーブル自体に電話があります。

于 2012-09-12T09:28:28.837 に答える