JPQL & EclipseLink Concat



当我连接em.CreateQuery concat中的字段时返回 NULL,因为我的一个字段可以具有 NULL。我想检查 NULL 就像在本机 MSSQL ISNULL(field,'something') 函数中一样。

我的查询是。

entManager.createQuery("SELECT NEW " + ThumbNail.class.getName() + "(p.id,p.thumbnail,p.thumbNailModifiedDate, CONCAT(p.firstName,' ',p.lastName,' ',p.middleName)) FROM Person p").setHint("eclipselink.refresh", "true").getResultList();   

也试过这个

entManager.createQuery("SELECT NEW " + ThumbNail.class.getName() + "(p.id,p.thumbnail,p.thumbNailModifiedDate, CONCAT(FUNC('ISNULL',p.firstName,''),' ',FUNC('ISNULL',p.lastName,''),' ',FUNC('ISNULL',p.middleName,'')) FROM Person p").setHint("eclipselink.refresh", "true").getResultList();

它没有用

JPQL 支持合并函数,该函数返回其第一个非空参数。所以你可以使用

CONCAT(coalesce(p.firstName, ''), 
       ' ', 
       coalesce(p.lastName, ''),
       ' ',
       coalesce(p.middleName, ''))

不过,我会把中间名放在中间,而不是放在最后。

解决了!但不适用于 JPQL 函数。

我刚刚向我的 pojo 对象添加了新的构造函数并用 JPQL 填充它,然后在那里用 checkig 表示 null。感谢伙计们的答案。

修改JPA查询是一团糟...

只需添加一个 notNull 方法:

private String notNull(String input){ if (input != null) { return input.trim(); } return ""; }

并将其放在实体类的每个(字符串)资源库上

setFirstName(String name) { this.name = notNull(name) }

所以你所有的"空值"都得到"并且 JPA 工作

但是:然后对于db-nulls,你会得到String=",所以要注意。

相关内容

  • 没有找到相关文章

最新更新