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

标签 java database hibernate join criteria

我有两个相关的表:

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

Hibernate 有一个从 FirstSecondManyToOne 定义。 {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/

相关文章:

java - 为什么递增 Java int 最终会导致负数?

java - Eclipse Debug模式未打开

mysql - 数据库规范化练习

javascript - 使用 AJAX 根据 Codeigniter 中的下拉值获取数据库值

c# - 在没有 CodeFirst 的情况下访问 C#/.NET 中的数据库

java - 如何找出用于 hibernate 中特定查询的事务隔离级别?

java - 乐观锁定和事务

java - 面向对象的方法结构 - 什么是允许的?

java - 即使生成的 SQL 确实返回值,HQL 也不返回值

java - App Engine : How does memory work?(将 Mahout 与 App Engine 结合使用)