java JPA查询,具有2个内部联接和基于其中一个联接对象的排序
我正在创建一个JPA查询,我想在其中对电子邮件地址进行排序。我查询的表是一个成员表。此成员可以指向帐户或邀请。MemberStatus枚举可以查看这些关联之一是否已填充
@Entity
public class Member {
@JoinColumn @ManyToOne private Account account;
@JoinColumn @OneToOne private Invite invite;
@Enumerated private MemberStatus status; //value can be INVITED or JOINED
}
所以Account和Invite都包含一个名为emailAddress的字符串字段。对于这个问题的意图,考虑它们是这样的:
@Entity
public class Account/Invite {
private String emailAddress;
}
我想检索所有成员,留下加入帐户,并邀请和排序的电子邮件地址。如果我写这样一个查询:
@NamedQuery(
name="findMembers",
query="select m from Member m
left join m.invite i
left join m.account a
order by emailAddress asc"
)
然后我得到一个例外,说:
org.postgresql.util.PSQLException: ERROR: column "emailaddress" does not exist Hint: Perhaps you meant to reference the column "invite1_.email_address" or the column "account2_.email_address".
这当然有道理。但是,有没有一种方法可以根据存在哪个左联接表向这个emailAddress字段添加一些别名?这在SQL中是可能的吗,更不用说JPA了?从数据库的角度来看,我不确定它将如何工作
顺便说一句,我不想走数据库继承的方向,因为这两个引用的实体都有emailAddress字段。与好处相比,这有太多的缺点
# 1 楼答案
您可以使用SQLs
coalesce
函数,该函数应该在JPA>=2.0
中得到支持。 e、 g