当我在em.CreateQuery concat
中连接字段时返回NULL,导致我的一个字段可以为NULL。我希望在Native MSSQL ISNULL(字段,'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();
它不起作用
答案 0 :(得分:3)
JPQL支持coalesce函数,该函数返回其第一个非null参数。所以你可以使用
CONCAT(coalesce(p.firstName, ''),
' ',
coalesce(p.lastName, ''),
' ',
coalesce(p.middleName, ''))
我会把中间名放在中间,而不是把它放在最后。
答案 1 :(得分:1)
<强>解决!强> 但不是JPQL功能。
我刚刚在我的pojo对象中添加了新的构造函数,并用JPQL填充它,然后用checkig for null进行汇总。 Thanx家伙的答案。
答案 2 :(得分:1)
修改jpa查询是一团糟......
只需添加一个notNull方法:
setFirstName(String name) { this.name = notNull(name) }
并将其放在Entity-Class上的每个(String)setter上
sanc['Deal Size / Complexity Measure2'] = sum([(math.log(x)+y) for x,y in zip(sanc['Deal Size'],sanc['Deal Size'])])
所以你的所有“nulls”都得到了“”而jpa的工作
但是:对于db-nulls,你得到String =“”,所以要注意..