このドキュメントはS2Hibernate-JPAのバージョン1.0.0-beta-1のものです。
S2Hibernate-JPAは以下の特徴を持っています。
- プロジェクトのインポート
JDK5以上が必要です。
あらかじめSeasar2とS2-Tigerをダウンロードして、EclipseのJavaプロジェクトとしてワークスペースにインポートしてください。
S2Hibernate-JPA-x.x.x.zipを解凍してできたs2hibernate-jpaディレクトリをEclipseのJavaプロジェクトとしてワークスペースにインポートしてください。
- 必要なjarファイル
S2Hibernate-JPAとして必要なjarファイルは、s2hibernate-jpa/libにそろってます。この他にSeasar2およびS2-Tigerのjarファイルが必要です。
Hibernate3はコネクションプールやキャッシュの実装をいろいろ選べるようになっているので、S2Hibernate-JPAで用意していない実装が必要な場合は、Hibernateのサイトよりダウンロードしてください。
- クラスパス
libのjarファイル(hsqldb.jar以外)とresources(jdbc.dicon、s2hibernate-jpa.dicon、log4j.properties、META-INF/persistence.xml)をCLASSPATHにとおせば、S2Hibernate-JPAを実行できます。Eclipseにインポートして使う場合は設定は不要です。
- データベース
簡単に機能を試すことができるように、RDBMSとしてHSQLDBを用意しています。lib/hsqldb.jarはHSQLDBを実行する上では必要ですが、本番では必要ありません。
S2Hibernate-JPAの機能を使用するにあたり、エンティティ、Dao(.java)、diconファイル、persistence.xmlの作成が必要になります。
Persistence APIの仕様に合わせてエンティティを作成します。
Daoの実装方法
- EntityManager型のフィールドを定義します。
private EntityManager entityManager;
- コンストラクタあるいはプロパティ経由で実装オブジェクトを受け取るように記述します。
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
- 各メソッドでEntityManagerに対する処理を記述します。
public Employee getEmployee(int empno) {
return entityManager.find(Employee.class, 7788);
}
クラスパスの通っているディレクトリにMETA-INFディレクトリを作成します。META-INFには、次のようなpersistence.xmlを格納します。
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="persistenceUnit" transaction-type="JTA">
<jta-data-source>jdbc/DataSource</jta-data-source>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.jndi.class"
value="org.seasar.extension.j2ee.JndiContextFactory"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.seasar.hibernate.jpa.transaction.S2TransactionManagerLookup"/>
<property name="hibernate.show_sql"
value="false"/>
<property name="hibernate.format_sql"
value="true"/>
<property name="hibernate.use_sql_comments"
value="false"/>
</properties>
</persistence-unit>
</persistence>
データソース名は、jdbc.diconの名前空間名.DataSourceコンポーネント名と一致させてください。
s2hibernate-jpa.diconをインクルードします。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components namespace="s2hibernateJPA">
<include path="javaee5.dicon"/>
<component name="entityManagerFactory" class="javax.persistence.EntityManagerFactory">
jpa.persistenceUnitManager.getEntityManagerFactory("persistenceUnit")
</component>
<component name="entityManager" class="org.seasar.framework.jpa.TxScopedEntityManagerProxy"/>
<component class="org.seasar.hibernate.jpa.unit.HibernateProxiedObjectResolver"/>
</components>
jpa.persistenceUnitManager.getEntityManagerFactory()に渡す永続ユニット名はpersistence.xmlの定義と一致させてください。
複数のJPA実装を使う場合や、複数のJDBC DataSourceを使う場合などは、それぞれごとにpersistence.xmlとs2hibernate-jpa.diconを用意し、異なったクラスパス上のディレクトリまたはJarファイルに配置します。
例えば、次のような構成にします。
- foo-classes
- META-INF
- foo-jpa.dicon
- エンティティクラス
- bar-classes
- META-INF
- bar-jpa.dicon
- エンティティクラス
foo-classes/META-INF/persistence.xmlを次のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="fooPersistenceUnit" transaction-type="JTA">
<jta-data-source>jdbc/fooDataSource</jta-data-source>
...
foo-classes/foo-jpa.diconを次のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components namespace="fooJPA">
<include path="javaee5.dicon"/>
<component name="fooEntityManagerFactory" class="javax.persistence.EntityManagerFactory">
jpa.persistenceUnitManager.getEntityManagerFactory("fooPersistenceUnit")
</component>
<component name="fooEntityManager" class="org.seasar.framework.jpa.TxScopedEntityManagerProxy"/>
bar-classes/META-INF/persistence.xmlを次のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="barPersistenceUnit" transaction-type="JTA">
<jta-data-source>jdbc/barDataSource</jta-data-source>
...
bar-classes/bar-jpa.diconを次のようにします。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
"http://www.seasar.org/dtd/components23.dtd">
<components namespace="barJPA">
<include path="javaee5.dicon"/>
<component name="barEntityManagerFactory" class="javax.persistence.EntityManagerFactory">
jpa.persistenceUnitManager.getEntityManagerFactory("barPersistenceUnit")
</component>
<component name="barEntityManager" class="org.seasar.framework.jpa.TxScopedEntityManagerProxy"/>
|