我是Grails的新手,我几个小时都遇到了这个问题。在此先感谢您的帮助!
这是我的问题:
我有一个包含两个表的数据库
您可以猜测用户有权喜欢 项目。 在域类项目中有 NO 关系( belongsTO,hasOne等等。) 在域类喜欢
中相同在数据库中,表格 LIKES 有一个 project_id 字段,但不设置为foreign_key。这是出于正确目的而采用这种方式。
现在我需要使用grails执行本机SQL查询,这非常简单,并返回预期的结果。
结果是所有喜欢或不喜欢的项目
以下是查询:
SELECT project.name, Likes.likes
FROM project
LEFT JOIN Likes
ON project.id = likes.project_id;
我无法找到将此SQL查询转换为HQL的方法。 似乎HQL在Domain实例上工作,并且域之间没有关系这一事实会返回错误,例如“Domain Project has Likes属性”,这是正确的。
有没有办法通过一个查询获得正确的结果,还是我需要进行两次查询并以编程方式构建一个包含结果的数组?
谢谢你的帮助
答案 0 :(得分:3)
如果您的域类没有关系,则无法使用HQL
执行此操作,正如您所注意到的那样。
但是在Grails中,您可以使用groovy.sql.Sql
直接访问数据库。服务示例:
class MyService {
def dataSource
void addNewRecord(String data) {
groovy.sql.Sql sql = new Sql(dataSource)
sql.execute("insert into my_table(my_anydata_clomn) values(sys.anyData.convertVarchar2(?))",[data])
}
}
答案 1 :(得分:1)
好的,它的工作原理如下:)
def dataSource
def getProjectList() {
groovy.sql.Sql sql = new groovy.sql.Sql(dataSource)
log.info(sql)
log.info("datasource " + dataSource)
def t = sql.rows("SELECT * \n" +
"FROM project\n" +
"LEFT JOIN Likes\n" +
"ON project.id=likes.project_id\n" +
"ORDER BY likes.likes")
sql.close()
return t;
}