我有 Hibernate HQL 查询,它似乎完美地完成了它的工作,但我目前正在尝试使用 Hibernate Criteria API 并想用 Criteria API 表达相同的 HQL 查询。在这个特定示例中,我在 HQL 查询中有两个连接,其中我的第二个连接使用第一个连接的别名。我想实现与 Criteria API 相同的东西。这可能吗?
这是原始查询:
select mt
from MessageThread mt
inner join mt.messageThreadsStatuses ts
inner join ts.threadLocations tl
where ts.user.userId = :userId and tl = 0";
这是重写的查询,它对我不起作用:
Criteria c = sf.getCurrentSession().createCriteria(MessageThread.class)
.createAlias("messageThreadsStatuses", "ts").setFetchMode("ts", FetchMode.JOIN)
.createAlias("ts.threadLocations", "tl").setFetchMode("tl", FetchMode.JOIN)
.add(Restrictions.eq("ts.user.userId", userId))
.add(Restrictions.eq("tl", 0));
例如,我还尝试将第二个别名定义为:
.createAlias("threadLocations", "tl").setFetchMode("tl", FetchMode.JOIN)
但没有成功。