2013-07-17 87 views
0

我試圖在下面運行查詢,Postgres數據庫。JPA休眠Postgres精度不起作用

select new map(avg(cast (speed as double precision)) as avg) 
    from table 

speed列的類型varchar

我使用JPA如下

 em = entityManagerFactory.createEntityManager();   
     Query hqlQuery = em.createQuery(query); 
     reportList = hqlQuery.getResultList(); 

執行的。當我運行此我得到以下

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, 
    found 'precision' near line 1 

錯誤有沒有人穿過來這個情況?我不能在Hibernate中使用精度?

+0

看起來像(大部分)是SQL,而不是HQL。如果你想使用Hibernate,你需要使用具有不同類型名稱的Hibernate查詢語言等。 –

+0

我在Hibernate中使用Native SQL。 – Makky

+2

那麼你需要使用createNativeQuery –

回答

2

如果您嘗試通過JPA you need to use em.createNativeQuery在Hibernate中執行本機SQL。

em.createQuery需要JPQL(一種從HQL派生的查詢語言)中的參數,以使Hibernate的JPQL實現使用org.hibernate.hql類。

雖然這看起來不像有效的SQL。 new map(...)?你不能混用JPQL/HQL,我還沒有在SQL方言中看到new

+0

感謝它是有道理的。 – Makky

0

我從

select new map(avg(cast (speed as double precision)) as avg) 
    from table 

改爲

 select new map(avg(cast (speed as double)) as avg) 
     from table 

Hibernate支持。我仍然在運行HQL查詢,它的工作原理。