2.2. 設定
最初にクラスパスを設定します (お好きな IDE で新しいプロジェクトを作成した後)。
- すべての Hibernate3 コアと必要なサードパーティライブラリをコピーします (Hibernate の lib/README.txt を参照)。
hibernate-annotations.jar
、lib/hibernate-comons-annotations.jar
、およびlib/ejb3-persistence.jar
を Hibernate Annotations ディストリビューションからクラスパスにコピーします。
また、
HibernateUtil
という名前の、Hibernate を静的な初期化子ブロックで起動する小さなラッパークラスを使用することが推奨されます。Hibernate ドキュメンテーションの他の場所でさまざまな形式のこのクラスを見たことがあるかもしれません。アノテーションサポートについては、このヘルパークラスを次のように拡張する必要があります:
package hello;
import org.hibernate.*;
import org.hibernate.cfg.*;
import test.*;
import test.animals.Dog;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration()
configure().buildSessionFactory();
} catch (Throwable ex) {
// Log exception!
throw new ExceptionInInitializerError(ex);
}
}
public static Session getSession()
throws HibernateException {
return sessionFactory.openSession();
}
}
ここで興味深いことは
AnnotationConfiguration
の使用です。パッケージとアノテートされたクラスが通常の XML 設定ファイル (通常は、hibernate.cfg.xml
) で宣言されます。以下は上記の宣言と同じです。
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <mapping package="test.animals"/> <mapping class="test.Flight"/> <mapping class="test.Sky"/> <mapping class="test.Person"/> <mapping class="test.animals.Dog"/> <mapping resource="test/animals/orm.xml"/> </session-factory> </hibernate-configuration>
hbm.xml と新しいアノテーションを同時に使用できることに注意してください。リソースエレメントは hbm ファイルまたは EJB3 XML デプロイメント記述子のいずれかになります。この違いは設定プロセスが透過的であるかどうかです。
または、プログラミング API を使用してアノテートされたクラスとパッケージを定義できます。
sessionFactory = new AnnotationConfiguration() .addPackage("test.animals") //the fully qualified package name .addAnnotatedClass(Flight.class) .addAnnotatedClass(Sky.class) .addAnnotatedClass(Person.class) .addAnnotatedClass(Dog.class) .addResource("test/animals/orm.xml") configure()..buildSessionFactory();
また、独自の設定メカニズムを持つ Hibernate EntityManager を使用することもできます。詳細については、このプロジェクトドキュメンテーションを参照してください。
Hibernate API でアノテーションを使用するにあたって、この起動ルーチンの変更や設定ファイル以外に違いはありません。他のプロパティ (
hibernate.properties
、hibernate.cfg.xml
、プログラミング API など) に対してお好きな設定方法を使用できます。アノテートされた永続化クラスと従来の hbm.cfg.xml
宣言を同じ SessionFactory
とともに使用することもできます。ただし、クラスは複数回宣言できません (アノテートされているか hbm.xml を使用するかどうか)。マップされたエンティティ階層で設定方針を混在させることはできません (hbm とアノテーション)。
hbm ファイルからアノテートへの移行プロセスを簡単にするために、設定メカニズムはアノテーションと hbm ファイル間のマッピングの重複を検出します。HBM ファイルは、クラスごとにアノテートされたメタデータよりも優先されます。優先度は
hibernate.mapping.precedence
プロパティを使用して変更できます。デフォルト値は hbm, class
であり、デフォルト値を class, hbm
に変更すると、重複が発生したときにアノテートされたクラスが hbm ファイルよりも優先されます。