JPA2タイプセーフクライテリアを使ってみた

まずは環境を準備。

  • JBoss AS 7を用意。
  • Eclipse3.7.1を用意。
  • JBoss Toolsをマーケットからインストール。
  • ランタイム設定でJBoss AS 7を設定しておく。
  • forge consoleビューを表示。
  • 三角ボタンでforgeを起動。
  • プロジェクトを作成する(好きなディレクトリに移動して)

$ new-project --named jpa2sample --topLevelPackage sekky.jpa2sample
? Use [/home/sekky/dev/jpa2sample] as project directory? [Y/n] Y

  • JPA2を追加(入力欄はTABで補完アリ)

$ setup persistence
? [provider=ARG (of type org.jboss.forge.spec.javaee.jpa.api.JPAProvider)]: HIBERNATE
? [container=ARG (of type org.jboss.forge.spec.javaee.jpa.api.JPAContainer)]: JBOSS_AS7
? The JPA provider [HIBERNATE], also supplies extended APIs. Install these as well? [y/N] N(きっと移植なんて未来永劫ないけどね)

  • 一応JSFCDIとかも突っ込む。

$ setup scaffold
? No scaffold type was selected, use default (JSF)? [Y/n] Y
? Scaffold provider [faces] is not installed. Install it? [Y/n] Y
? Facet [forge.maven.WebResourceFacet] requires packaging type(s) [war], but is currently [jar]. Update packaging? (Note: this could deactivate other plugins in your project.) [Y/n] Y

  • pomを修正する(メタモデルクラスを自動生成する注釈プロセッサー)

http://docs.jboss.org/hibernate/jpamodelgen/1.0/reference/en-US/html_single/参照

ここまでで何とか準備が完了。

これでEntityを作りCriteriaを投げる。
Entity作りは省略。ここら辺はJPAを調べてくださいな。
Criteriaの例はこんな感じ。

流れるようなインターフェースではなく、APIの使い勝手は正直微妙な感じがする。
が!タイプセーフなおかげでEntity(DB)修正しても怖くない!

一気に書き上げてるので間違いがあるかも。
何かあればTwitterにでもどうぞ。