1

我仍在尝试了解Restrictions.in("propName", ...)HibernateCriteria对象的操作符是如何工作的。

假设我有一个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();

我是否应该添加一个全新的标准只是说“或味道为空”?这似乎不是很有效。

4

2 回答 2

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();
于 2013-02-19T04:48:12.177 回答
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" } ) );

请添加/删除括号,适当地格式化代码,因为我是手动输入的。

于 2013-02-19T09:00:19.023 回答