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。