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