我无法在hibernate hql查询中的两个表之间建立内连接

时间:2012-04-18 19:21:02

标签: sql hibernate hql

我是新手。请帮帮我。

我的内部联接看起来像这样: select p.idprodus, p.denumire, p.cantitate from Produs p inner join Furnizor f on p.idfurn = f.idfurn

我想在列idfurn上进行内连接,但是我得到了这些错误:

org.hibernate.QueryException:外部或完整连接必须后跟路径表达式select p.idprodus, p.denumire, p.cantitate from sakila.entity.Produs p inner join Furnizor f on p.idfurn = f.idfurn

at org.hibernate.hql.classic.FromParser.token(FromParser.java:170)
at org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)
at org.hibernate.hql.classic.PreprocessingParser.token(PreprocessingParser.java:108)
at org.hibernate.hql.classic.ParserHelper.parse(ParserHelper.java:28)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:216)
at org.hibernate.hql.classic.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:185)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)

2 个答案:

答案 0 :(得分:3)

在HQL中,您使用实体,而不是表。实体通过关联(OneToOne,OneToMany等)链接在一起。联接可以在关联实体之间完成。

例如,如果Product和Provider之间存在ManyToOne关联,则HQL查询为:

select p from Product p inner join p.provider provider where ...

on子句是不必要的,因为Hibernate从ManyToOne关联的映射知道Product使用product.id_provider主键的product.id_provider主键与其提供者相关联。

Hibernate documentation

中,所有这些都有很好的解释,有很多例子

答案 1 :(得分:0)

如果关联(例如OneToMany映射)不存在且您需要内部联接,则使用旧的cross join notation