加入 SQL 在 hibernate/goram 中使用 grails 框架运行?
Join SQL Operation in hibernate/goram using grails framework?
您好,我正在尝试连接两个相同的表 - sql 查询工作正常。
但是当我使用 groovy 和休眠在代码中尝试相同的操作时,我遇到了异常。
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 版本,即 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
问题是 DomainClass.executeQuery()
执行 HQL,HQL 不支持自连接,并且在 HQL 中你处理的是 class 而不是表,所以名称区分大小写。
自联接的等价物是相同类型的关联。例如,Service
域 class 如下所示:
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/Hibernate 关联创建的。 HQL JOIN 子句只允许您更改关联类型:INNER、LEFT、RIGHT 等
您好,我正在尝试连接两个相同的表 - sql 查询工作正常。 但是当我使用 groovy 和休眠在代码中尝试相同的操作时,我遇到了异常。
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 版本,即 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
问题是 DomainClass.executeQuery()
执行 HQL,HQL 不支持自连接,并且在 HQL 中你处理的是 class 而不是表,所以名称区分大小写。
自联接的等价物是相同类型的关联。例如,Service
域 class 如下所示:
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/Hibernate 关联创建的。 HQL JOIN 子句只允许您更改关联类型:INNER、LEFT、RIGHT 等