2013-07-17 88 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查询,它的工作原理。