0

我有两个名为“A”和“B”的表。表“B”主键映射为“A”表中的外键“b_id”(列名)。在表“A”中,“B”(b_id)的主键可能为空。即在'B'表记录不存在。表“B”将有列“del_flag”

现在我需要从“A”表中选择所有行(包括将“b_id”设为空的行)。如果表'A'中的b_id不为空,那么我需要检查表'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)给出了结果集。

我想 这可能是实际要求的原因。

4

1 回答 1

0

尝试这个:

session.createCriteria(A.class)
            .createAlias("b", "bClass")
            .setFetchMode("bClass", FetchMode.JOIN)
            .add(Restrictions.or(Restrictions.isNull("bClass"),
                    Restrictions.eq("bClass.delFlag", 0)));
于 2012-11-21T08:07:07.643 回答