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);
}
| << 前へ | 次へ >> |