Java Persistence API(JPA)はHibernateのNative APIより簡単

Hibernateを使うのだけどJPAがよくわからないからNative APIを直接使っているという方や、Hibernateを学習したいのだけど機能が多すぎて辟易しているという方が実は結構多いんじゃないかと感じています。そこで、今日はSeasar2とは関係なくHibernateのNative APIよりJPAの方が便利だよというところを紹介してみます。

マッピングが簡単

JPAにはマッピングのためのアノテーションが用意されているのでマッピングは結構簡単です。普通(?)に使う分ならば覚えることも多くないです。前にこの日記で挙げたアノテーションだけで一般的なケースはすべて対応できます。
http://d.hatena.ne.jp/taedium/20070604#p1

Native APIを使う場合にxmlマッピングを書くのは大変だと思うのでアノテーションはお勧めです。xmlで書くと必ずといっていいほど書き間違いますが、アノテーションで書く場合はあまりまちがいません。まちがってもコンパイルエラーですぐ気づきますし。

エンティティの登録が簡単

xmlで定義を書く場合、エンティティを登録するxmlが必要だと思うのですがこれは意外に面倒くさいです。JPAとして使うとHibernateがエンティティを自動的に検出してくれるので楽チンです。

学習が簡単

僕の感覚としては2倍とか3倍くらいNative APIよりJPAのほうが簡単です。Hibernateは機能が多すぎると思うのですよね。JPAがわかってくると自然とHibernateもわかってきます。JPAはいいからとにかくHibernateを使いたいだけなんだといった方でもまずはJPAとして使ってみるのがいいと思います。
JPAとして使うとHibernateとしての機能を十分に活かしきれないのではと思う方がいるかもしれませんが、これは大丈夫です。いつでもHibernateの機能を使えるからです。JPAのEntityManagerインターフェースには次のようなメソッドが定義されています。

public Object getDelegate();

このメソッドはSessionを返すので必要なところで次のようにキャストして使えばいいです。

Session session = (Session) entityManager.getDelegate();
Filter filter = session.getEnabledFilter(...);
おまけ

学習は簡単ていうけどJPAは情報量が少ないじゃんて思うかもしれません。大丈夫、メーリングリストがあるのでいろいろ質問しちゃいましょう。
https://ml.seasar.org/mailman/listinfo/jpa