JPQL& EclipseLink Concat

时间:2012-11-29 14:47:26

标签: jpa null eclipselink jpql concat

当我在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();

它不起作用

3 个答案:

答案 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 =“”,所以要注意..