0

我正在将一张桌子连接到另一张桌子。加入有效。我想将结果限制为包含可以在任一表中的“错误”消息的记录。当我执行以下操作时,我没有得到任何结果,但我知道应该有 2 个。

Criteria criteria = session.createCriteria(TableName.class);
criteria.createAlias("someList", "things");

Criterion restriction1 = Restrictions.eq("status", "Error");
Criterion restriction2 = Restrictions.eq("things.anotherStatus", "Error");
criteria.add(Restrictions.or(restriction1, restriction2));

finalList = criteria.list();

我注意到这些限制本身确实有效。因此,如果我只对没有别名的原始表进行第一个限制,或者如果我只对别名表进行第二个限制,那么我每次都会得到 1 个结果。

此外,如下所示的简单连接 SQL 查询可以按预期工作:

Select count(*) 
From table1 t1
Left join table2 t2 on t1.id = t2.another_id
Where t1.status = 'ERROR' or t2.anotherStatus = 'ERROR'

我怎样才能在 Hibernate 中做到这一点?

编辑 1:我现在看到当我使用@JoinColumn注释时 Hibernate 会进行内部联接。如何将其更改为进行外部联接?

编辑 2:即使添加@Fetch(FetchMode.JOIN)仍然会导致内部连接!是什么赋予了?文档清楚地表明它将进行外部连接。注释现在看起来像这样:

@OneToMany
@JoinColumn(name="ID_FK")
@Fetch(FetchMode.JOIN)
private List<Thing> things;
4

1 回答 1

0

答:改用criteria.createAlias("someList", "things", JoinType.LEFT_OUTER_JOIN);

说明:JoinType指定 no 时,默认createAlias执行 an inner join

于 2013-11-05T20:57:40.873 回答