2

我对此很陌生。请帮我。

我的内部连接如下所示: 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)
4

2 回答 2

3

在 HQL 中,您使用实体,而不是表。实体通过关联(OneToOne、OneToMany 等)链接在一起。关联实体之间只能进行连接。

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

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

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

在Hibernate 文档中,所有这些都通过大量示例得到了很好的解释。

于 2012-04-18T21:19:15.210 回答
1

如果不存在关联(例如 OneToMany 映射)并且您需要内部联接,则使用旧的交叉联接表示法

于 2016-02-02T18:24:38.740 回答