【发布时间】:2016-07-15 13:16:16
【问题描述】:
我有以下实体(示例):
@Entity
@Table(name = "person")
public class Person implements Serializable {
@Id
@Column(name = "person_id", columnDefinition = "UUID")
private UUID userId;
@Column(name = "name")
private String name;
@ElementCollection
@MapKeyColumn(name = "phonetype")
@Column(name = "number")
@CollectionTable(name = "person_phones", joinColumns = @JoinColumn(name = "userId"))
private Map<String, String> phoneNumbers;
}
现在,phoneNumbers 是 String,在这个例子中是 String。假设键是类型(如“mobile”、“home”、“office”、“fax”、“pager”...),值是任何文本格式的实际数字。
我想查询一个有两个电话号码的人:
Select * From person where
in his phone_numbers exists phonetype = 'home' and number = '0-123-456'
and also in his phone_numbers exists phonetype = 'mobile' and number = '9-876-421'
(and possibly, dynamically others)
and name = 'John'
我已经构建了一个有效的 sql 子查询:
select home.userId from
(
(SELECT userId from person_phones
where (phonetype = 'home' and number = '0-123-456'))
) as home,
(
(SELECT userId from person_phones
where (phonetype = 'mobile' and number = '9-876-421'))
) as mobile
where home.userId = mobile.userId
如前所述,这只是一个 sql 子查询。我正在我的项目中编写 JPA 2.1 条件查询。这似乎异常复杂。谁能给个提示?
【问题讨论】:
标签: java sql java-ee-7 jpa-2.1