使用多个参数连接两个表的标准

时间:2012-05-31 10:53:31

标签: java database hibernate join criteria

我有两张相关的表格:

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

Hibernate的ManyToOne定义从FirstSecond{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查询。有没有办法以不同的方式写这个?这可以写成避免子查询/ DetachedCriteria吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试HQL '使用'子句..

SELECT f.* FROM First f left join Second s ON f.fk_Second = s.id with f.x = s.y;