0

仕事では、社内の ORM (2000 年より前) を使用しており、Java 用の別の ORM ソリューションに移行することを検討していますが、いくつかの特定の要件があります。これらのリクエストをサポートするフォームまたは ORM を知っている人はいますか?

  1. 継承のサポート: 私たちの Java には非常に深い継承構造があり、現在、「最上位」のクラスに属性を追加すると、ORM プロシージャを (SQL で) 手動で編集して、それぞれに新しいクラスを追加する必要があります。サブクラス

  2. デコレータ テーブルのサポート: 一部のクラスは、特定のオブジェクトに対して任意の (ユーザー提供の) 属性を格納できる必要があります。現在、これは FieldName と FieldValue を含む行に Item Id を一致させる単なるテーブルであり、これらすべてをプルします。属性として。より良い説明については、以下を参照してください。

  3. オブジェクトの永続性が組み込まれているため、オブジェクトは要求されたときにのみデータベースにロードおよびデータベースから書き込まれ、それ以外の場合はメモリに残されます。また、呼び出しを行うのではなく、終了時に変更を自動的に保存できれば素晴らしいと思います.save()(潜在的に危険ではありませんか?)。

  4. いつものように、使いやすく (できれば - これは私たち全員が望んでいることではありませんか?)、優れたパフォーマンス

お時間をいただきありがとうございます。私たちが選んだものとその理由、および実装中に発見したいくつかのヒントで質問を更新できてうれしいです!


#2の詳細説明:

(なぜこのようにしなければならないのか尋ねないでください。変更はこのプロジェクトの「範囲外」です)

アイテムテーブル:

ItemId | Type  | Price
-------|-------|-------
1      | Mouse | 9.99
2      | Dog   | 12.99

デコレータ テーブル:

ItemId | FieldName | Value
-------|-----------|-------
1      | Age       | 12
2      | Breed     | Blue Long Hair
2      | Name      | Fluffy 

アイテム オブジェクト:

Item1
  ItemId -> 1
  Type -> Mouse
  Price -> 9.99
  Age -> 12

Item2
  ItemId -> 2
  Type -> Dog
  Price -> 12.99
  Breed -> Blue Long Hair
  Name -> Fluffy
4

1 に答える 1

0
  1. JPA (および Hibernate) は継承をサポートします。
  2. 言ってる意味がよくわからない
  3. JPA/Hibernate は、デフォルトで、トランザクションの間、オブジェクトをメモリに残します。各トランザクションにはオブジェクトの独自のコピーがあり、この第 1 レベルのキャッシュは各トランザクションの開始時に再作成されます。これは、他の同時トランザクション (または別のアプリケーション) がオブジェクトを変更した可能性があるためです。Javaにはデストラクタがないので、意味がわかりません。ただし、デフォルトでは、トランザクションの最後に、エンティティへのすべての変更が自動的にデータベースに保存されます。
  4. ドキュメントを読み、その仕組みを理解するのに時間がかかる場合、JPA/Hibernate は比較的簡単に使用できます。しかし、それには学習曲線があります。ORM が舞台裏で何をしているのかを理解している限り、典型的なユースケースの 95% でパフォーマンスは問題ありません。
于 2012-09-04T09:54:43.957 に答える