我仍在尝试了解Hibernate Restrictions.in("propName", ...)
对象的Criteria
运算符的工作原理。
假设我有一个具有可空属性IceCream
的实体flavour
,我希望得到风味等于"chocolate"
,"banana"
或null
的所有冰淇淋
使用Hibernate标准执行此操作的正确方法是什么?
我尝试了这个但是它不包括结果列表中冰淇淋味道为空的行:
String[] allowedFlavours = { "chocolate", "banana", null };
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria.add(Restrictions.in("flavour", allowedFlavours));
return criteria.list();
我是否应该添加一个全新的标准来说“或者味道是空的”?这看起来效率不高。
答案 0 :(得分:1)
试试这种方式
1>
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria .add(Restrictions.disjunction().add(Restrictions.eq("flavour", "chocolate")).add(Restrictions.eq("flavour", "banana")).add(Restrictions.isNull("flavour")));
2 - ;
String[] allowedFlavours = { "chocolate", "banana"};
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria.add(Restrictions.disjunction().add(Restrictions.in("flavour", allowedFlavours)).add(Restrictions.isNull("flavour"));
return criteria.list();
答案 1 :(得分:0)
您可以使用disjunction()
disjunction :将表达式组合在一个单独的分离中(A或B或C ...)
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria.add(Restrictions.disjunction()
.add( Restrictions.isNull("flavour") )
.add(Restrictions.in("flavour", new String[] { "chocolate", "banana" } ) );
请添加/删除括号,格式化代码,因为我已手动输入。