0

我有两个相关的表:

+-----------+           +----------+
|   First   |  *     1  |  Second  |
+-----------+ --------- +----------+
| fk_Second |           | id       |
| version   |           | ...      |
| ...       |           | y        |
| x         |           +----------+
+-----------+

Hibernate 有一个ManyToOne定义 fromFirstSecond。这{fk_Second, version}是表中composite-id的一个First(尽管我认为在这种情况下它不相关)。

我正在尝试编写 Criteria 调用,它在 SQL 中看起来像:

SELECT * FROM First WHERE 
   First.fk_Second = Second.id AND 
   First.x = Second.y

我在生成最后一位时遇到了麻烦 - 额外的连接条件。

Criteria c = session.createCriteria(First.class);
   .createCriteria("second", "join_between_first_and_second")
   .add(Restrictions.eqProperty("y", "x")   // <- fails: "x" is not found

在这种情况下我不能使用 HQL 查询。有什么不同的写法吗?这可以写成避免 subquery/DetachedCriteria吗?

4

2 回答 2

1
Criteria c = session.createCriteria(First.class, "first");
c.createAlias("first.second", "theSecond");
c.add(Restrictions.eqProperty("first.x", "theSecond.y");

如果您没有为属性添加别名,则该属性被视为条件根实体的一部分(在本例中为 First)。

于 2012-05-31T11:04:41.220 回答
0

尝试 HQL 'With'子句..

SELECT f.* FROM First f left join Second s ON f.fk_Second = s.id with f.x = s.y;
于 2012-05-31T11:03:58.957 回答