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]