休眠条件在限制内使用别名

时间:2019-03-21 09:16:12

标签: java hibernate-criteria

我有两个班级,第二个班级是第一个班级的财产。例如

付款

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"))));

此处由于没有加入而无法使用,但如果我在顶部为批次创建别名,则仅当支出具有批次时才过滤条件。如何编写不带属性别名但可以过滤属性的条件的条件?

1 个答案:

答案 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的批次。