CriteriaBuilder 変数 = manager.getCriteriaBuilder();まず最初に行うのは、CriteriaBuilderクラスのインスタンス作成です。CriteriaBuilderは、Criteria APIを利用するための専用クエリークラスを作成するためのビルダークラスです。
CriteriaQuery<エンティティ> 変数 =CriteriaBuilderから、CriteriaQueryクラスのインスタンスを作成します。CriteriaQueryは、Criteria APIを使ってクエリー文を生成するための専用クラスです。これは、引数にエンティティクラスのclassを指定します。
[CriteriaBuilder].createQuery( エンティティ.class );
Root<エンティティ> 変数 = [CriteriaQuery] .from( エンティティ.class);CriteriaQueryから、Rootというクラスのインスタンスを取得します。これは、データベースアクセスのベースとなるものです。JPQLの「from エンティティ」部分に相当するオブジェクト、とイメージしておくと良いでしょう。
[CrieriaQuery].select( [Root] );CriteriaQueryのselectを呼び出します。引数にはRootを指定します。これは、JPQLの「select」句に相当するものを作成する作業です。これにより、「select from エンティティ」という基本部分が生成された、と考えて下さい(fromはRootにより用意されています)。
Query 変数 = manager.createQuery( [CriteriaQuery] );CriteriaQueryから、Queryクラスのインスタンスを生成します。これで、createQueryなどを使う場合と同じところに戻ってきました。
List list = [Query] .getResultList();後は、QueryのgetResultListを呼び出してエンティティをListとして取り出すだけです。Queryが得られれば、後はこれまでやったやり方とまったく同じですね。
※リストが表示されない場合
AddBlockなどの広告ブロックツールがONになっているとリストなどが表示されない場合があります。これらのツールをOFFにしてみてください。
// ※サーブレットに以下を追記 import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Root; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { EntityManager manager = factory.createEntityManager(); CriteriaBuilder builder = manager.getCriteriaBuilder(); CriteriaQuery<MyDataEntity> criteria_query = builder.createQuery(MyDataEntity.class); Root<MyDataEntity> root = criteria_query.from(MyDataEntity.class); [CriteriaQuery] .select(root); Query query = manager.createQuery(criteria_query); List list = query.getResultList(); request.setAttribute("list", list); RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp"); dispatcher.forward(request,response); }
<< 前へ | 次へ >> |