1-2.Hibernateの検索機能とcreateCriteriaの代案について
こんにちは管理人(@vip___p)です。
今回はhibernateのバージョンの違いで苦労した点について
触れていこうと思います。備忘録用です。
Hibernateの参考サイトは海外が多いことや
バージョンが古い記事が上がっていることが多く苦労しました。
具体的にはコードはcreateCriteria(Sample.class);についてです。
同じような方は方は是非参考にしてください。
xmlの設定についてはこちら
Hibernate/cfg.xml/hbm.xml/propertiesの設定
createCriteriaが非推奨
古いバージョンで多用されていた
createCriteria非推奨になっておりました。
Criteria criteria = session.createCriteria(Sampl.class).list();
改善案としては下記を使用しました。
// Create CriteriaBuilder CriteriaBuilder builder = session.getCriteriaBuilder(); // Create CriteriaQuery CriteriaQuery createQuery = builder.createQuery(Sample.class); createQuery.from(Sample.class);
注意と疑問
引数からデータを絞り込む際(検索処理等)
DBのデータ量が多くなると使用できなるので注意が必要です。
データ量が多くても以前のコードだと問題なく動きます。
// Create CriteriaBuilder Criteria criteria = session.createCriteria(Sampl.class); // 引数の値が存在する場合 if (hikisuu!=null) { // hikisuuがテーブルnameの値と等しいとき追加 criteria.add( expression.eq("name", hikisuu) } //リスト化 List list = criteria.list(); // 一致する値を返却 return list;
改善案を使用した場合
// Create CriteriaBuilder CriteriaBuilder builder = session.getCriteriaBuilder(); // Create CriteriaQuery CriteriaQuery createQuery = builder.createQuery(Sample.class); createQuery.from(Sample.class); // データ量によってはリスト化すると落ちる場合あり List list = session.createQuery(createQuery).getResultList(); List listA = = new ArrayList(); for(Sample i :list){ // 一致する場合追加 if(i.getHikisuu.equals(hikisuu)){ listA.add(i) } return list; }
この方法だと一度すべてリスト化するのでDBのデータ量が多くなると
重くなるまたは、止まってしまうので注意してください。
まとめ
今回のまとめです。
廃止されたcreateCriteriaについてまとめました。
同じような人で悩んでいる方の参考になれば幸いです。
ディスカッション
コメント一覧
まだ、コメントがありません