我有两个名为'A'和'B'的表。表'B'主键在'A'表中作为外键映射为'b_id'(列名)。在表'A'中,'B'(b_id)的主键可以为空。即在'B'表中记录不存在。表'B'将具有列'del_flag'
现在我需要从'A'表中选择所有行(包括将'b_id'作为null)。如果 b_id 在表'A'中不为空,那么我需要检查表'B'的'del_flag'为'0'(零或不为零)。 即如果存在'B'记录,我只需要显示'del_flag'为0的记录。
如何为上述条件编写条件。
我正在尝试以下前两个条件。根据我的要求它应该工作。
criteria.createAlias("b", "m"); -----> (1)
criteria.add(Restrictions.or(Restrictions.isNull("b"),Restrictions.eq("m.del_flag", "0"))); --->(2)
//criteria.add(Restrictions.isNull("b")); ----->(3)
让我们来解决我面临的问题。
问题出在' creatAlias '上。我改变了我的要求,只选择'b_id'作为 null 。我只执行(1)(3)条件( 2被评论)。我得到了空记录。
经过一段时间的努力,我评论条件(1)。现在我得到结果集。
如果我执行(1)和(3),我将无法获得结果集。只有(3)才会给出结果集。
我认为这可能是实际要求的原因。
答案 0 :(得分:0)
试试这个:
session.createCriteria(A.class)
.createAlias("b", "bClass")
.setFetchMode("bClass", FetchMode.JOIN)
.add(Restrictions.or(Restrictions.isNull("bClass"),
Restrictions.eq("bClass.delFlag", 0)));