2015-10-15 52 views
0

嗨我想加入两个相同的表 - SQL查询工作正常。 但当我在代码中使用groovy和休眠时,我正在尝试相同的例外。使用grails框架在hibernate/goram中加入SQL操作?

2015-10-15 16:35:21,084 [http-8083-3] ERROR hql.PARSER - line 1:62: unexpected token: ON 
    2015-10-15 16:35:21,104 [http-8083-3] ERROR errors.GrailsExceptionResolver - Exception occurred when processing request: [GET] /mips/console/admin/serviceListJSONip - parameters: 
    _dc: 1444907110958 
    Stacktrace follows: 
    org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 62 [from com.company.test.domains.Service s LEFT JOIN Service S2 ON s.parent_id = s2.id where 1=1 and s.serviceType = 'SERVICE' and s.enabled = 1 and cId in (1,2,2,33) order by s.id asc ,rowId asc] 
     at $Proxy74.createQuery(Unknown Source) 
     at com.company.test$_closure15.doCall(AdminController.groovy:884) 
     at com.company.test$_closure15.doCall(AdminController.groovy) 
     at com.canvas.mips.controllers.SecureController.invokeMethod(SecureController.groovy) 
     at com.company.test$_closure20.doCall(AdminController.groovy:1030) 
     at com.company.test$_closure20.doCall(AdminController.groovy) 
     at org.grails.jaxrs.web.JaxrsFilter.doFilterInternal(JaxrsFilter.java:46) 
     at java.lang.Thread.run(Thread.java:662) 
    Hibernate: 

我使用旧的Grails版本的IE 1.3和这里是我的代码片段就这么在这里

results = Service.executeQuery(query.toString() , [], [max:max,offset:offset]); 

select 
t1.ID, 
t1.Name, 
t2.Name as PARENT_Name 
from SERVICE t1 
left join SERVICE t2 on t1.PARENT_ID = t2.ID 
order by t1.ID 
+0

SQL查询信息可在此处获得http://stackoverflow.com/questions/33144069/how-do-i-join-同样的表和排序它在SQL – irobo

+0

为什么不粘贴查询在这个问题呢? –

+0

添加了查询 – irobo

回答

1

问题是DomainClass.executeQuery()执行HQL,HQL不支持自连接,和在HQL中,你正在处理类而不是表,因此名称区分大小写。

自连接的等价物是同一类型的关联。例如,具有Service域类是这样的:

class Service { 
    String Name  
    Service parent 
} 

你可以写一个HQL这样的查询:

select 
t1.ID, 
t1.Name, 
t2.Name as PARENT_Name 
from Service t1 
left join Service.parent t2 
order by t1.ID 

在HQL,与GORM /休眠协会正在建立的连接。 HQL JOIN子句只允许您更改关联类型:INNER,LEFT,RIGHT等。