4

当我在em.CreateQuery concat返回 NULL 中连接字段时,导致我的字段之一可以有 NULL。我想在 Native MSSQL ISNULL(field,'somthing') 函数中检查 NULL。

MyQuery 是。

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();

它没有用

4

3 回答 3

3

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

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

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

于 2012-11-29T15:45:04.977 回答
1

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

我刚刚向我的 pojo 对象添加了新的构造函数,并用 JPQL 填充它,然后用 checkig 连接到那里。谢谢大家的回答。

于 2012-11-30T10:25:03.690 回答
1

修改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="",所以要注意..

于 2015-10-30T10:21:09.350 回答