我想用hibernate实现以下查询:
SELECT * form A
INNER JOIN B
ON A.id = B.id AND B.someOtherColumn = 5
我不知道如何添加AND语句。
答案 0 :(得分:3)
如果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在A中,也可以使用以下HQL查询。
select a from A a where a.b.someOtherColumn = 5
如果要隐式过滤集合,可以在集合映射上使用@Where
注释。
@Where(clause="someOtherColumn = 5")
与@Where
类似,但您可以使用变量in子句。您需要为每个会话显式启用和设置变量值。
withClause
参数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