JPAのCriteriaか(--;)


id:da-yoshiさんの「GlassFish V3 b67を使ってJava Persistence 2.0を試す - TYAGE EMOTION」を読んで、同等の事をEzJDBCで行った場合と比較してみました。。。

JPAのタイプセーフなCriteriaです。下記のソースを見てください。

何が書いてあるかさっぱり分かりません><

 // CriteriaBuilderを生成します。
 CriteriaBuilder qb = em.getCriteriaBuilder();
 // PdOrderテーブルのCriteriaを生成
 CriteriaQuery cq = qb.createQuery(PdOrder.class);

 // メインテーブルを設定します。
 Root order = cq.from(PdOrder.class);
 // PdOrderテーブルとUserテーブルの結合
 order.fetch(PdOrder_.user, JoinType.LEFT);
 // OrderItemテーブルとProductテーブルのFETCH結合
 order.fetch(PdOrder_.orderDetails, JoinType.LEFT)
     .fetch(OrderDetail_.product, JoinType.LEFT);
 // 抽出条件の設定
 cq.where(qb.like(order.join(PdOrder_.user).get(User_.name), "%" + name + "%"));
 // SQLを発行し結果を取得
 List = em.createQuery(cq).getResultList();

ちなみに…EzJDBCで上記と同等の事をするとこんな感じです。

 // メインテーブル情報を生成します。
 PD_ORDER _PD = new PD_ORDER();
 // SQLを発行し結果を取得
 List = EzJDBC.from(_PD._ORDER_ITEM._PRODUCT).join(_PD._USER)
                   .where(_PD._USER.name.like("%" + name + "%"))
                   .find(PdOrder.class);

き、記述量が大幅にちがいますね…( ̄口 ̄|||)