我有两个班级,第二个班级是第一个班级的财产。例如
付款
class Payout{
int id;
Batch batch;
}
批处理
class Batch{
int id;
Date closedDate;
}
我想批量提取支出为null or batch.closedDate is null
;
我写了
Criteria criteria = session.createCriteria(Payout.class, "payout")
.add(or(isNull("payout.batch"), and(isNotNull("payout.batch"), isNull("payout.batch.closedDate"))));
此处由于没有加入而无法使用,但如果我在顶部为批次创建别名,则仅当支出具有批次时才过滤条件。如何编写不带属性别名但可以过滤属性的条件的条件?
答案 0 :(得分:0)
阅读一段时间后,我找到了解决方案。
Criteria criteria = session.createCriteria(Payout.class)
.createAlias(Payout_.batch.getName(), "b", JoinType.LEFT_OUTER_JOIN)
.add(or(isNull(Payout_.batch.getName()), isNull("b." + Batch_.closed.getName())));
正如我在问题中告诉的那样,常规联接是createAlias函数中的默认联接,它接受具有批处理的支出。但是使用JoinType.LEFT_OUTER_JOIN时,如果退出,则仅查找ID等于payout.batch.id的批次。