wiki:java/HibernateJPA

Hibernate JPAとは?

J2EE5標準仕様のO/RマッピングのAPIとして、Java Persistence API(JPA)が策定されています。Hibernate JPAはHibernateをこのJPAに対応させたものです。JBoss5からは、EJB3対応を行うために、Hibernate JPAがJPAのコアとして利用されます。

利用方法

Hibernate3.2、Hibernate Entity Manager 3.2から、それぞれ下記のjarファイルを抽出し、クラスパスに通します。

Hibernate

  • asm.jar
  • asm-attrs.jar
  • commons-collections-2.1.1.jar
  • commons-logging-1.0.4.jar
  • cglib-2.1.3.jar
  • hibernate3.jar
  • jboss-common.jar
  • dom4j-1.6.1.jar
  • jta.jar

Hibernate Entity Manager

  • ejb3-persistence.jar
  • hibernate-entitymanager.jar
  • hibernate-annotations.jar
  • javassist.jar

Tips

Hibernate JPAの利用方法については、他のWebページなりをご覧ください。ここでは、上級者向けのTipsを紹介します。

動的にAnnotated Classをロード

JPAで利用できるようにしたエンティティクラスは、通常persistence.xmlから読み込みます。例えば、次のように記述します。

  <persistence-unit name="em">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>example.ejb3.Account</class>
    <class>example.ejb3.Item</class>
    ....

しかし、これでは動的にクラスを読み込むことができません。動的に読み込みたい場合は、次のようにします。

   Ejb3Configuration configuration = new Ejb3Configuration();
   configuration.addAnnotatedClass(Account.class);
   configuration.addAnnotatedClass(Item.class);
   ...
   EntityManager em = configuration.createEntityManagerFactory().createEntityManager();

また、hibernate.properties(もしくはhibernate.cfg.xml)でその他の設定を行う必要があります。 詳細は、下記のクラスを参照してください。

統計情報の取得

Hibernateには、エンティティクラス毎にCRUDの操作の統計情報を取るAPIが用意されています。このAPIを利用すると、パフォーマンスチューニング等で有用な情報を取得することができます。このAPIを利用するには次のようにします。

EntityManagerFactoryImpl factoryImpl = (EntityManagerFactoryImpl)factory;
Statistics stat = factoryImpl.getSessionFactory().getStatistics();
String[] entities = stat.getEntityNames();
System.out.println("[dump]");
for(int i=0;i<entities.length;i++){
  System.out.println(entities[i]+":"+stat.getEntityStatistics(entities[i]));
}

実行結果は、次のようになります。

org.ultimania.ejb.Purchaseorder:EntityStatistics
 [loadCount=0,updateCount=0,insertCount=0,deleteCount=0,fetchCount=0,optimisticLockFailureCount=0]
org.ultimania.ejb.Orderdetail:EntityStatistics
 [loadCount=0,updateCount=0,insertCount=0,deleteCount=0,fetchCount=0,optimisticLockFailureCount=0]
org.ultimania.ejb.Customer:EntityStatistics
 [loadCount=0,updateCount=0,insertCount=0,deleteCount=0,fetchCount=0,optimisticLockFailureCount=0]
org.ultimania.ejb.Item:EntityStatistics
 [loadCount=2,updateCount=0,insertCount=0,deleteCount=0,fetchCount=0,optimisticLockFailureCount=0]