1

クラスC1、C2、..、Cn(n〜100)がたくさんあります。各クラスには、他のクラス (子) への参照があります。ただし、1 つのクラスが異なるクラスで参照される可能性があります (子は異なる型の親を持つことができます)。たとえば、C1 は、C2、C3、C4 という子を持つことができます。ただし、C2 は C4 の子になることもできます。

class C1 extends AbstractEntity{
   C2 c2;
   C3 c3;
   C4 c4;
}

class C4 extends AbstractEntity {
   C2 c2;
   C5 c5;
}

エンティティを持っているので、その親を取得したいです。だから私は AbstractEntity クラスを作成します

class abstract AbstractEntity{
   Long id;
   AbstractEntity parent;
}

オブジェクトをデータベースに永続化するために Hibernate で JPA アノテーションを使用している場合。したがって、次の AbstractEntity テーブルを取得します。

table AbstractEntity (id long primary key, parent_id long foreign key references AbstractEntity(id), discriminator varchar(40));

具体的なエンティティ (追加、更新、削除) を使用して操作を実行するには、AbstractEntity との結合が実行されます。操作ごとに!したがって、すべての操作で同じテーブルにアクセスする必要があります。これはパフォーマンスにどのように影響しますか?これにより、異なる種類のリソースに対して同時に操作を実行できますか? それらはブロックされませんか?

トランザクション中にテーブル全体がロックされるわけではなく、これは使用される DBMS に大きく依存することを理解しています。しかし、一般的には、hibernate を使用する場合、大量の子クラスに対して共通のスーパー クラスを取り除く方法を検討する方がよいでしょうか? DBMS が本当に重要な場合は、MySQL と Oracle にしましょう。

4

1 に答える 1

0

異なるサブクラスに対する操作は、互いにブロックしません。hibernate はそれ自体でテーブルをブロックしません。パフォーマンスが十分かどうかを確認する最も簡単な方法は、試してみることです。

于 2012-09-10T04:17:05.187 に答える