Java 如何在hibernate中创建具有多个条件的内部联接

Java 如何在hibernate中创建具有多个条件的内部联接,java,sql,hibernate,inner-join,Java,Sql,Hibernate,Inner Join,我想用hibernate实现以下查询: SELECT * form A INNER JOIN B ON A.id = B.id AND B.someOtherColumn = 5 我不知道如何添加AND语句。请尝试使用where SELECT * from A INNER JOIN B ON A.id = B.id WHERE B.someOtherColumn = 5 标准 如果A和B类之间存在任何关联,如B在A中,则可以使用以下查询: Criteria criteria = sessio

我想用hibernate实现以下查询:

SELECT * form A
INNER JOIN B
ON A.id = B.id AND B.someOtherColumn = 5

我不知道如何添加AND语句。

请尝试使用where

SELECT * from A
INNER JOIN B
ON A.id = B.id WHERE B.someOtherColumn = 5
标准 如果A和B类之间存在任何关联,如B在A中,则可以使用以下查询:

Criteria criteria = session.createCriteria(A.class, "a");
criteria.setFetchMode("a.b", FetchMode.JOIN);
criteria.createAlias("a.b", "b");
criteria.add(Restrictions.eq("b.someOtherColumn", 5));

List list=criteria.list();
B HQL 此外,如果B在A中,您还可以使用下面的HQL查询尝试此操作

select a from A a where a.b.someOtherColumn = 5
C@Where注释 如果要隐式过滤集合,可以在集合映射上使用@Where注释

@Where(clause="someOtherColumn = 5")
D@Filter注释 类似于@Where,但可以在子句中使用variable。您需要显式启用并设置每个会话的变量值

E createAlias带有with子句参数
如果您使用的是Hibernate,那么对于上面的代码,您可以使用Criteria,您可以添加一个示例吗?但我恐怕这不一样。在第一条语句中,它将只对someOtherColumn=5的行进行连接,而在第二条语句中,它将对所有行进行连接,然后才执行where部分?当然。我说的是过程。第二个不是效率较低吗?@John Ephraim,A类和B类之间有关联吗?@julius_am,性能应该是一样的-考虑到WHERE子句中的限制,这取决于数据库的查询计划器来优化联接。如果有疑问,请参阅查询说明。使用WITH子句E创建别名会导致关联无法立即获取。有办法解决这个问题吗?
Criteria criteria = session.createCriteria(A.class, "a");
criteria.createAlias("a.b", "b", JoinType.INNER_JOIN, Restrictions.eq("b.someOtherColumn", 5));

List list=criteria.list();