2016-12-09 9 views
0

すべてのユーザーを返すHibernate DAOメソッドがあります。条件付きデータベースからレコードをフィルタリングする方法

public List<User> getAllUsers() { 
    Session session = sessionFactory.getCurrentSession(); 
    Query query = session.createQuery("from com.model.User"); 
    List<User> users = query.list(); 
    session.flush(); 
    return users; 
} 

Userエンティティがprofession性質を持っています。職業がDeveloperに等しいユーザーのみを照会したいと思います。どうすればこれを達成できますか?

+0

はい。リストをJSPに渡す前にフィルタリングしてください。または、を使用します。あなたはc:forEachについてどうお知りになりますが、c:ifについてはどうですか? –

+0

良い質問をするのを助けるために、私たちの[SO Question Checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をよく読んで、良い答えを得てください。 –

+0

ありがとう、本当に私は最初の方法でそれをやりたいです(あなたのJSPに渡す前にリストをフィルタリングします)。私はDAOでどのように記述するかを追加します。また、私はどのようにそれを行うのか分からないので、例があればそれは良いでしょう。 –

答えて

0

なぜあなたは問題を解決するためにJAVA8ストリームを使用していませんか?

のは、あなたがこのように、ユーザーの一覧を取得しているとしましょう:

Session session = sessionFactory.getCurrentSession(); 
Query query = session.createQuery("from com.model.User"); 
List<User> users = query.list(); 

は今、ちょうど職業によってフィルタリングするために次の操作を行います。

users = users.stream(). 
    filter(user -> user.getProfession.equals("Developer")).collect(Collectors.toList()); 
+0

あなたが何千もの 'User'レコードを持っていて、あなたが望む述語を持つ行のほんの一部に興味がある場合、データベーステーブル全体をJVMのメモリにストリーミングしてから述語を適用するのではなく、述語をWHERE条件としてデータベースに渡すことで、より高速なパフォーマンスを達成しようとしています。 – Naros

関連する問題