Hibernate标准将属性限制为包括null在内的可能性集

时间:2013-02-19 04:42:09

标签: java hibernate hibernate-criteria

我仍在尝试了解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();

我是否应该添加一个全新的标准来说“或者味道是空的”?这看起来效率不高。

2 个答案:

答案 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" } ) );

请添加/删除括号,格式化代码,因为我已手动输入。