2015-07-28 143 views
1

我看不到錯誤在哪裏。錯誤休眠QuerySyntaxException:意外的令牌

這是查詢:

@NamedQuery(name = Sustitutos.Q_BUSCAR_SUSTITUTOS_OFICINA, 
query = "select e from Sustitutos e inner join Personas p ON p.codPersona = e.sustituido WHERE p.codUnidad = :codigo"), 

,我把它叫做這樣:

 Query q = this.em.createNamedQuery(Sustitutos.Q_BUSCAR_SUSTITUTOS_ZONA); 
     q.setParameter("codigo", codUnidadSup); 
     List<Sustitutos> resultado = q.getResultList(); 

堆棧跟蹤:

Error in named query: Sustitutos.buscarSustitutosOficina 
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 
1, column 83 [select e from com.bs.proteo.channel.arc.entity.Sustitutos e 
inner join Personas p ON p.codPersona = e.sustituido WHERE p.codUnidad = 
:codigo] 

我做錯了嗎?謝謝

+0

請向我們展示了整個堆棧跟蹤? –

+1

你必須加入使用對象引用。 HQL與SQL不同。如果你需要更多的幫助,那麼對象'Sustitutos'和'Personas' – Jens

回答

1

JPQL沒有"ON",但你可以做一個隱含的連接並使用WHERE子句。

@NamedQuery(name = Sustitutos.Q_BUSCAR_SUSTITUTOS_OFICINA, 
    query = "select e from Sustitutos e join e.personas p WHERE p.codUnidad = :codigo"), 
1

正如您在堆棧跟蹤中看到的那樣,問題與ON關鍵字有關。

這是一個SQL關鍵字,它不是在JPQL的認可,並在註釋中規定你應該JOIN參加對象引用。

這是您的查詢應該是這樣:

query = "select e from Sustitutos e join e.personas p WHERE p.codUnidad = :codigo")