Criteria cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "jerry");
Criteria kittens = cats.createCriteria("kittens");
List catList = cats.list();


上面的结果中仅包含带有相关小猫的猫。如果“小猫”外键为空,则满足“ name = jerry”限制的猫将不包括在结果中。这似乎很奇怪,因为我没有对“小猫”设置任何限制。我有两个问题:为什么会发生这种现象?避免这种行为并使猫返回的理想方法是什么,无论它们是否有小猫(是否为createAlias)?

出现此问题的原因是,使用条件条件,我可能想执行以下操作:

if (someCondition) kittens.add(restriction);


因此,从实践的角度来看,提前建立“小猫”标准是有意义的,尽管它并没有达到我的预期。

最佳答案

对于HQL和Criteria,无论何时指定隐式联接,Hibernate都会假定您需要INNER JOIN。而INNER JOIN则过滤掉null。

从猫到小猫,您都需要使用左联接。

criteria.addAlias("kittens","kitten", CriteriaSpecification.LEFT_JOIN);

关于java - Hibernate createCriteria()排除空结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25451787/

10-13 04:22