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

时间:2016-01-28 06:27:49

标签: java sql hibernate inner-join

我想用hibernate实现以下查询:

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

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

2 个答案:

答案 0 :(得分:3)

A)标准

如果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 annotation

如果要隐式过滤集合,可以在集合映射上使用@Where注释。

@Where(clause="someOtherColumn = 5")

D)@Filter annotation

@Where类似,但您可以使用变量in子句。您需要为每个会话显式启用和设置变量值。

E)带有withClause参数

的createAlias()
Criteria criteria = session.createCriteria(A.class, "a");
criteria.createAlias("a.b", "b", JoinType.INNER_JOIN, Restrictions.eq("b.someOtherColumn", 5));

List list=criteria.list();

答案 1 :(得分:1)

尝试使用where而不是..

SELECT * from A
INNER JOIN B
ON A.id = B.id WHERE B.someOtherColumn = 5