hibernate中左外连接的标准

时间:2012-11-21 07:52:06

标签: java hibernate

我有两个名为'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)才会给出结果集。

我认为这可能是实际要求的原因

1 个答案:

答案 0 :(得分:0)

试试这个:

session.createCriteria(A.class)
            .createAlias("b", "bClass")
            .setFetchMode("bClass", FetchMode.JOIN)
            .add(Restrictions.or(Restrictions.isNull("bClass"),
                    Restrictions.eq("bClass.delFlag", 0)));