4

フィールドを連結して NULL をem.CreateQuery concat返すと、フィールドの 1 つが NULL になる可能性があります。Native MSSQL ISNULL(field,'something') 関数のように 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();

そして、それはうまくいきませんでした

4

3 に答える 3

3

JPQL は、null 以外の最初の引数を返す合体関数をサポートしています。だからあなたは使うことができます

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

ミドルネームは最後ではなく、真ん中につけます。

于 2012-11-29T15:45:04.977 に答える
1

解決しました! しかし、JPQL 関数ではそうではありません。

pojo オブジェクトに新しいコンストラクターを追加し、JPQL で埋めてから、そこに null の 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) }

したがって、すべての「null」は「」を取得し、jpaは機能します

BUT: db-null の場合は String="" になるので、注意してください..

于 2015-10-30T10:21:09.350 に答える