2012-04-18 1 views
1

나는 이것으로 새롭다. 도와주세요. select p.idprodus, p.denumire, p.cantitate from Produs p inner join Furnizor f on p.idfurn = f.idfurnhibernate hql 쿼리에서 두 테이블 간의 내부 조인을 할 수 없습니다.

내가 내부는 열 idfurn에 가입 만들고 싶어하지만, 나는 이러한 오류를 얻을 :

은 내부 같은 외모에 가입 내

org.hibernate.QueryException : 외부 또는 가입 전체해야합니다 HQL에서 경로 식 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) 

답변

3

뒤에는, 당신은 실체가 아닌 테이블을 사용합니다. 엔티티는 연관 (OneToOne, OneToMany 등)을 통해 서로 연결됩니다. 조인은 연결된 엔티티간에 수행 할 수 있습니다. 당신이 제품과 공급자 사이에 ManyToOne 연관이있는 경우

예를 들어, HQL 쿼리는 다음과 같습니다

최대 절전 모드는 제품입니다 ManyToOne 협회의지도에서 알고 있기 때문에 절에
select p from Product p inner join p.provider provider where ... 

은 불필요 provider.id_provider 기본 키에 대한 product.id_provider 외래 키를 사용하여 공급자와 연관됩니다.

이 모든 내용은 많은 예제와 함께 Hibernate documentation에 설명되어 있습니다.

+0

HQL 쿼리에서 p.provider를 쓰는 이유를 이해할 수 없습니다. 왜 그 p를 작성 했습니까? 미안하지만, 초보자인데이 점을 이해하는데 작은 문제가 있습니다. – alin

+0

예를 들어, 엔티티 Product의 모든 열을 인쇄하려고하는데 Product에서 질의를 시도 할 때이 엔티티의 외래 키인 열에는 정보가 표시되지 않습니다. sakila.entity.HistoryProduct가 나타납니다. \t sakila.entity.Provider \t sakila.entity.Category 대신 값입니다. 제게 제안 해주세요. 정말 고마워! – alin

+0

나는 당신의 코드를 가지고 있지 않다. 나는 마법 같은 공이 없다. 그래서 그것에 대해 논평하는 것은 불가능하다. 하지만 당신은 Hibernate의 거대한 부분, 즉 엔티티들 간의 연결을 놓쳤다 고 생각합니다. 설명서를 읽으십시오. 나는 제품에 제공자가 있기 때문에 p.provider를 썼다. 자바에서는'p.getProvider()'를 호출 할 것입니다. HQL에서는 p.provider를 씁니다. –

0

연관 (예 : OneToMany 매핑)이없고 내부 참여가 필요한 경우 이전 cross join notation을 사용하세요.

관련 문제