【发布时间】:2013-06-25 11:26:10
【问题描述】:
我正在尝试制定一个公式来选择用户个人资料的用户友好名称。如果其中至少一个不为空且不为空(包含非空白字符),则选择 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
但只有 3 个参数:BOTH、FROM 和 CONCAT 的结果。这个问题有什么解决方法吗? DB 是 PostgreSQL 9.1,Hibernate 版本是 4.2.1。 以防万一,这是表结构:
Profile
bigint id
text shortname
SocialProfile
bigint id
text firstname
text lastname
它们通过 id 字段一对一相关,在 Java 代码中 SocialProfile 扩展 Profile。在 PgAdmin SQL 编辑器中,此请求完美运行。
【问题讨论】:
标签: hibernate parameters formula trim