我有两张相关的表格:
+-----------+ +----------+
| First | * 1 | Second |
+-----------+ --------- +----------+
| fk_Second | | id |
| version | | ... |
| ... | | y |
| x | +----------+
+-----------+
Hibernate的ManyToOne
定义从First
到Second
。 {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
吗?
答案 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;