Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa JPQL&;日食海螺_Jpa_Null_Eclipselink_Jpql_Concat - Fatal编程技术网

Jpa JPQL&;日食海螺

Jpa JPQL&;日食海螺,jpa,null,eclipselink,jpql,concat,Jpa,Null,Eclipselink,Jpql,Concat,当我连接em.CreateQuery concat中的字段时,返回NULL,因为我的一个字段可能有NULL。我想在原生MSSQL ISNULL(字段,'somthing')函数中检查NULL 我的查询是 entManager.createQuery("SELECT NEW " + ThumbNail.class.getName() + "(p.id,p.thumbnail,p.thumbNailModifiedDate, CONCAT(p.firstName,' ',p.lastName,' '

当我连接
em.CreateQuery concat
中的字段时,返回NULL,因为我的一个字段可能有NULL。我想在原生MSSQL ISNULL(字段,'somthing')函数中检查NULL

我的查询是

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支持coalesce函数,该函数返回其第一个非空参数。所以你可以用

CONCAT(coalesce(p.firstName, ''), 
       ' ', 
       coalesce(p.lastName, ''),
       ' ',
       coalesce(p.middleName, ''))
<>我把中间名放在中间,而不是把它放在结尾。< /P> < P> <强>解决!<强> 但不能使用JPQL函数


我只是在我的pojo对象中添加了新的构造函数,并用JPQL填充它,然后用checkig表示null。谢谢你们的回答。

修改jpa查询真是一团糟

只需添加一个notNull方法:

private String notNull(String input){ if (input != null) { return input.trim(); } return ""; }
并将其放在实体类的每个(字符串)setter上

setFirstName(String name) { this.name = notNull(name) }
所以你所有的“空值”都会得到“”,jpa也会工作


但是:对于db nulls,您会得到String=“”,因此请注意..

如果您使用的是本机函数,您可以使用本机查询->
entManager.createNativeQuery(“本机SQL”)
Eclipselink和JPA通常很好地处理空值,所以我没有看到您的问题,但是如果有充分的理由,本地查询即使不可移植也很容易。Thanx用于回复。但是我不能用本机查询,因为p.thumbnail是我的资源类。我已经用原生查询尝试过了。给你。将其从日志中复制并更改为:entManager.createNativeQuery(“选择t0.ID,t1.ID,t0.THUMB_-NAIL_-ID,t1.CREATION_-DATE,t1.from_模块,t1.CHANGE_-DATE,t1.RESOURCE_-BYTE,t1.DIGEST,t1.RESOURCE_-TYPE,t0.MODIFIED_-DATE,ISNULL(t0.FIRST_-NAME,)+“”+ISNULL(t0.LAST_-NAME,)+“”+ISNULL(t0.MIDDLE_-NAME,)”从INTERDRU PERSON t0到左外部连接INTERDRU资源t1 ON(t1.ID=t0.THUMB\u NAIL\u ID)”,ThumbNail.class.getResultList();Rised error.Func已添加到Eclipselink 2.1中,因此在您下面提到的EL 2.0.1中不可用。在JPA2.1规范中,它被EclipseLink 2.4中的函数所取代:迁移到EclipseLink的更高版本时,是否会与其他查询发生冲突?JPA似乎不支持嵌套的JPQL函数用法。EclipseLink 2.0.1版,GlassFish v3发布异常,并在GlassFish中尝试更高版本的EclipseLink。