I have an @Entity
which has an @Enumerated
field mapped to it:
@Entity
@Table
public class Device implements Serializable {
@I
You have anotated it as
@Enumerated(EnumType.STRING)
this will store the name of the enum. Your db column will have either "MOBILE" or "EMAIL" but not 'true' or 'false'. you can change your query to
return factory.getCurrentSession().createCriteria(Device.class).
add(Restrictions.eq("typeOfDevice", DeviceType.MOBILE)).list();
Its more reable isn't?
It seems like a solution to your problem might be along the lines of:
Criteria criteria = factory.getCurrentSession().createCriteria(Device.class);
Disjunction or = Restrictions.disjunction();
for (DeviceType type : DeviceType.values()) {
if (type.isFubar()) {
or.add(Restrictions.eq("typeOfDevice", type));
}
}
criteria.add(or);
return criteria;
Instead of doing where typeOfDevice.fubar = true
, we're approaching it more along the lines of where (typeOfDevice = Mobile OR typeOfDevice = OtherFubar OR typeOfDevice = OtherOtherFubar)
. I realize this isn't the one-liner you were originally shooting for, but I think it answers the question as asked.