2015-10-15 18 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等。