概念を誤解されている可能性があります。基本的に、Hibernate に代わるものを探しているのではなく、ORM に代わるものを探しています。
Hibernate は、適切な ORMの数少ない試みの 1 つです。Hibernate は、オブジェクトとリレーショナルの不一致のほとんどのパラダイムを解決しようとします。それらは:
- 粒度の問題
- サブタイプの問題
- アイデンティティの問題
- 協会に関する問題
- データナビゲーションの問題
詳細については、Hibernateを使用した Java の永続化を参照してください。
要約すると、軽い ORM などというものはありません。適切な ORM ソリューション、またはリレーショナル モデルをオブジェクト モデルにマッピングする代わりに、SQL ステートメントをオブジェクトとメソッドにマッピングする myBatis などの他のソリューションがあります。
忘れないでください - Hibernate のすべての機能を使用する必要はありません。カスタム SQL、プレーンな JDBC と非常に快適に組み合わせて、その機能のサブセットのみを使用できます。
edit1: 遅い起動について
Intermezzo : 私は現在、私たちのアプリケーション用に特別に調整された 1 つの独自の ORM ソリューション (Hibernate のタフほどスマートではない) を使用しています。最大の問題は起動時でもあります。これは、データベース全体をオブジェクトにマッピングすることは簡単ではないためです。
さて、休止状態について。ご存じかもしれませんが、Hibernate は起動時に CRUD SQL ステートメントも生成します。大きなデータベースがある場合、これはパフォーマンスに影響を与える可能性があります。ただし、このスタートアップ SQL 生成をオフにして、実行時に生成される動的ステートメントに切り替えることができます。
XML 表記を使用すると、次のように実現できます。
<class name="SomeClass"
dynamic-insert="true"
dynamic-update="true">
...
</class>
または Hibernate アノテーションを使用:
@Entity
@org.hibernate.annotations.Entity(
dynamicInsert = true, dynamicUpdate = true
)
public class SomeClass { ...
edit2: カスタム SQL の混合について
参照されている書籍 Java Persistence with Hibernate では、かなり詳細に説明されています。第 8 章ではレガシー データベースの操作について説明し、DML (カスタム SQL と同様に、CRUD コードをカスタム SQL に置き換えることもできます!) および DDL (汎用ランタイム DDL 操作) を変更する方法のヒントも提供します。あなたはそこをのぞくべきです:)