Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails HQL-直接查询联接表_Grails_Many To Many_Hql - Fatal编程技术网

Grails HQL-直接查询联接表

Grails HQL-直接查询联接表,grails,many-to-many,hql,Grails,Many To Many,Hql,我希望编写一个HQL查询来检查Grails中多对多关系的联接表中是否存在特定的对 SQL很简单: SELECT count(*) FROM [ProjectCalculator].[dbo].[task_project] WHERE task_id=[task_id] AND project_id=[project_id] 代码: 我不知道如何为此编写HQL,因此它与数据库无关 出现此问题的原因是,当我将现有任务添加到项目中时,我没有收到任何错误: 例: projectInstance.add

我希望编写一个HQL查询来检查Grails中多对多关系的联接表中是否存在特定的对

SQL很简单:

SELECT count(*)
FROM [ProjectCalculator].[dbo].[task_project]
WHERE task_id=[task_id] AND project_id=[project_id]
代码:

我不知道如何为此编写HQL,因此它与数据库无关

出现此问题的原因是,当我将现有任务添加到项目中时,我没有收到任何错误:

例: projectInstance.addToTaskstask.saveflush:true

如果该项目的任务已经存在,我会期望从数据库中获得一个重复的主键错误,但我没有收到任何关于此的通知。它只是默默地失败了


谢谢

您可以传递参数failOnError:true,该参数引发ValidationException。不知道它是否捕获SQLException。我没试过。 您还可以在DataSource.groovy中设置logSql=true,以便在控制台中打印查询。
希望这有帮助。

您不应该查询联接表,这是SQL方式,而不是Hibernate方式。 您可能面临的问题与hibernate/grom中的多对多关系有关

将static mappedBy=[project:none]添加到Task类中,并生成/运行迁移(如果您使用的是持久性数据库),这将解决您的问题,并且您应该能够这样做

projectInstance.addToTaskstask.saveflush:true

我现在不记得在这种情况下是否还需要Proyect类中的mappedBy=[tasks:none]

class Project {

String title
...

static belongsTo = [Task, Modifier]
static hasMany = [tasks:Task, modifiers : Modifier]
...
}

class Task {

    String description

    static hasMany = [project:Project]

...
}