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 ...

Hibernate は ManyToOne アソシエーションのマッピングから、 product.id_provider 外部キーを provider.id_provider プライマリ キーに使用して Product がそのプロバイダーに関連付けられていることを認識しているため、 on 句は不要です。

これらはすべて、 Hibernate のドキュメントで、多くの例とともに非常によく説明されています。

于 2012-04-18T21:19:15.210 に答える
1

関連付け (OneToMany マッピングなど) が存在せず、内部結合が必要な場合は、古いクロス結合表記を使用します。

于 2016-02-02T18:24:38.740 に答える