我有两个相关的表:
+-----------+ +----------+
| First | * 1 | Second |
+-----------+ --------- +----------+
| fk_Second | | id |
| version | | ... |
| ... | | y |
| x | +----------+
+-----------+
Hibernate 有一个从 First
到 Second
的 ManyToOne
定义。 {fk_Second, version}
是 First
表的 composite-id
(尽管我认为它在本例中不相关)。
我正在尝试编写 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
吗?
最佳答案
Criteria c = session.createCriteria(First.class, "first");
c.createAlias("first.second", "theSecond");
c.add(Restrictions.eqProperty("first.x", "theSecond.y");
如果您没有在属性前面添加别名,则该属性将被视为条件根实体的一部分(在本例中为 First)。
关于java - 使用多个参数连接两个表的标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10832186/