ユーザー プロファイルのわかりやすい名前を選択する式を作成しようとしています。少なくとも 1 つが null ではなく空白でない (空白以外の文字が含まれる) 場合はfirstname + ' ' + lastnameを選択し、それ以外の場合はshortname (同じ条件で) を選択し、最後にshortnameが空白または null の場合はそれを選択します。 idを選択し、文字列に変換します。
@Formula("COALESCE(NULLIF(TRIM(BOTH FROM CONCAT(sp.firstname, ' ', sp.lastname)), ''), TRIM(p.shortname), to_char(p.id, 'FM9999999999999999')) " +
"FROM socialprofile AS sp " +
"JOIN profile AS p ON sp.id=p.id")
public String getUserFriendlyName() {
return super.getUserFriendlyName();
}
結果は次のとおりです。
org.hibernate.HibernateException: Unexpected number of trim function operands : 10
ただし、引数は BOTH、FROM、および CONCAT の結果の 3 つだけです。この問題の回避策はありますか? DB は PostgreSQL 9.1、Hibernate のバージョンは 4.2.1 です。念のため、テーブル構造は次のとおりです。
Profile
bigint id
text shortname
SocialProfile
bigint id
text firstname
text lastname
これらはidフィールドによって 1 対 1 で関連付けられます。Java コードでは、SocialProfile は Profile を拡張します。PgAdmin SQL エディタでは、このリクエストは完全に機能します。