Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
在自定义方言中,如何让Hibernate忽略冒号_Hibernate - Fatal编程技术网

在自定义方言中,如何让Hibernate忽略冒号

在自定义方言中,如何让Hibernate忽略冒号,hibernate,Hibernate,我有以下自定义方言函数: registerFunction("weight_running_total", new SQLFunctionTemplate(Hibernate.STRING, "(@runtot := @runtot + weight)")) // This one takes an argument and saves it off in a variable named @val, that can be retrieved later in

我有以下自定义方言函数:

     registerFunction("weight_running_total",
       new SQLFunctionTemplate(Hibernate.STRING, "(@runtot := @runtot + weight)"))

    // This one takes an argument and saves it off in a variable named @val, that can be retrieved later in the same connection
    registerFunction("save_off_last_value",
        new SQLFunctionTemplate(Hibernate.STRING, "@val := ?1"))
但是Hibernate并没有仅仅通过,而是抱怨冒号,并给了我“无效的过滤器参数名称格式”异常。我发现其他人也有这个问题,但还没有找到解决方案,所以在这里寻求帮助


顺便说一句,这是Hibernate 3(目前无法升级),b/c我正在使用Grails。

这是一个超级大的黑客。。。如果对其他人不起作用,您可以随时回到在Hibernate过滤器中以某种方式更改查询的想法(请参阅),但我没有深入研究如何在GORM中实现这一点

Hibernate不会忽略“:”,无论你做什么,它都会专门寻找这个角色。在查看QueryParameters的Hibernate代码后,如果session.getEnabledFilters().size()==0,它将采用一个不会中断的代码路径(在我的例子中,我注意到我的查询与此查询略有不同,但仍然采用该代码路径)。仅启用了一个筛选器,即dynamicFilterEnabler。因此,我在查询之前会这样做:

sessionFactory.getCurrentSession().disableFilter('dynamicFilterEnabler')
然后在此查询之后将其重新打开

我不知道那个过滤器是什么,所以我做了一些搜索,在几张JIRA票中找到了一些关于它的信息:

显然,当您在hasMany和belongsTo中使用相同的域对象时,这是一种解决方法。我没有这种情况,所以我可以关闭它(现在)。很难看,但它现在起作用了