Java 将空字符串和空字符串分组在一起的条件生成器
当我将按某个文本字段分组时,我想用criteria builder创建sql查询。在这种情况下,我希望将具有空值和空字符串的字段分组在一起(我知道空字符串和空字符串之间有区别,但这就是它已经完成的方式,逻辑上没有区别)。这就像这里,但我想在criteria builder中这样做,这就是问题所在。我无法使coalesce与builder.coalesce(entity.get(“value”),“”)或builder.literal(“”)替换“”,如示例中所示: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
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正在使用文本的放置参数。您可能必须使用本机查询来执行此操作。