Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
Java 将空字符串和空字符串分组在一起的条件生成器_Java_Jdbc_Criteria Api - Fatal编程技术网

Java 将空字符串和空字符串分组在一起的条件生成器

Java 将空字符串和空字符串分组在一起的条件生成器,java,jdbc,criteria-api,Java,Jdbc,Criteria Api,当我将按某个文本字段分组时,我想用criteria builder创建sql查询。在这种情况下,我希望将具有空值和空字符串的字段分组在一起(我知道空字符串和空字符串之间有区别,但这就是它已经完成的方式,逻辑上没有区别)。这就像这里,但我想在criteria builder中这样做,这就是问题所在。我无法使coalesce与builder.coalesce(entity.get(“value”),“”)或builder.literal(“”)替换“”,如示例中所示: public void gro

当我将按某个文本字段分组时,我想用criteria builder创建sql查询。在这种情况下,我希望将具有空值和空字符串的字段分组在一起(我知道空字符串和空字符串之间有区别,但这就是它已经完成的方式,逻辑上没有区别)。这就像这里,但我想在criteria builder中这样做,这就是问题所在。我无法使coalesce与builder.coalesce(entity.get(“value”),“”)或builder.literal(“”)替换“”,如示例中所示:

public void groupBy(Path path){
    Expression group = builder.coalesce(entity.get("value"), ""); this doesn't work
    Expression<String> empty = builder.literal("");
    group = builder.coalesce(entity.get("value"), empty); this doesn't work either
public void groupBy(路径){
Expression group=builder.coalesce(entity.get(“value”),“”);这不起作用
表达式empty=builder.literal(“”);
group=builder.coalesce(entity.get(“value”),为空);这也不起作用
这种情况是,当创建hibernate查询时,在查询中有??并且hibernate不确定它们是否是相同的值。我在SELECT和GROUP BY中都使用了该表达式,我得到一个错误:值必须出现在GROUP BY子句中,或者在聚合函数中使用

在criteria builder中是否有任何方法可以做到这一点,比如创建一些常量空字符串值,将其转换为sql作为“”,而不是“”,或者以其他方式将空值和空字符串分组在一起

我正在使用PostgreSQL、Hibernate和Java


我将感谢每一个答案

SQL级别的技术是通过表达式分组,例如在PostgreSQL中,我知道你可以
通过聚合(值“”)
,但不幸的是,我不知道如何让criteria builder这样做,它会将其转换为
通过聚合(值“”)分组
而不是
按合并分组(值,,)
很好-如果使用一个放置参数,则在查询中会有两个不同的参数
$1
$2
,Pg在计划时间之后才知道它们是相同的,因此可能会拒绝查询。
builder.literal(“)
应该可以工作,但有什么问题吗?请显示生成的SQL查询和该情况下的准确错误消息文本。错误:列“value”必须出现在GROUP BY子句中,或用于聚合函数-这与简单的“
选择合并(值),…..按合并(值),”的情况相同
对于代码
builder.coalesce(entity.get(“value”),builder.literal(“”)
来说,同样的结果很不幸,因此criteria builder正在使用文本的放置参数。您可能必须使用本机查询来执行此操作。