Reputation: 922
Tags contains tag with field name with value "#tylkoclara". In first case results has size 1 which is expected result
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
List<Tag> results = new ArrayList<Tag>();
Criteria criteria = session.createCriteria(Tag.class);
criteria.add(Restrictions.eq("name", "#tylkoclara"));
results = criteria.list();I
But if I try to use whole collection as criteria, result's size is 0
public static List<Tag> filterTags(List<Tag> tags) {
SessionFactory sf = HibernateUtil.getSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(Tag.class);
List<Tag> results = new ArrayList<Tag>();
for(Tag tag : tags) {
criteria.add(Restrictions.eq("name", tag.getName()));
}
results = criteria.list();
I have no ideas why is that happening
Upvotes: 1
Views: 94
Reputation: 34856
By adding your Restrictions in a loop like this, you are creating AND condition instead of OR condition. And since no tag has multiple different names, 0 results will be returned.
You need to create OR condition, for example like this (I've omitted the parts of your code dealing with session creation, etc to keep the example shorter):
public List<Tag> filterTags(List<Tag> tags) {
Criteria criteria = session.createCriteria(Tag.class);
Disjunction disjunction = Restrictions.disjunction();
for (Tag tag : tags) {
disjunction.add(Restrictions.eq("name", tag.getName()));
}
criteria.add(disjunction);
return criteria.list();
}
Upvotes: 1