【发布时间】:2012-01-05 04:11:30
【问题描述】:
我一直在努力寻找答案,但到目前为止我还没有运气。我正在尝试通过 JPQL 查询来检索和排序对象列表,但由于查询本身在不同表之间使用了很多连接,所以这真的很困难。
基本上,我们有一个带有字段的实体“Person”
String name
List<Telephone> phones
List<Email> emails
List<Address> addresses
“电话”、“电子邮件”和“地址”都是独立的实体,每个实体都包含自己的数据,例如字符串字段“数字”或类似的东西(Address.street、Address.state)。所以这四个对象都是数据库中的表。
我希望用户能够按任何特定数据对人员列表进行排序。现在,我想按以下任何一项进行排序:人员姓名、电子邮件列表中的第一个电子邮件地址、此人的第一个地址所在的街道或州等。因此,如果 Person 列表如下:
Name Phone Number Street State
Mack 555-1234 1 Main Street WA
Andy 222-9999 2 Other Way RI
Wendy 222-3333 3 Wrong Way UT
我希望表格按状态排序,列表应该是:
Name Phone Number Street State
Andy 222-9999 2 Other Way RI
Wendy 222-3333 3 Wrong Way UT
Mack 555-1234 1 Main Street WA
我希望使用 JPQL 查询来完成此操作,以便在将列表提供给 Web 服务器以优化性能时,它已经被过滤和排序。我还必须补充一点,我正在实现一个搜索功能,可以在所有这些“列”中搜索特定术语。
长话短说,我如何编写一个 JPQL 查询,以便获取已为这些列之一排序的 Person 对象列表?我对“SELECT DISTINCT”的实现:
SELECT DISTINCT x FROM Person x, IN(x.phones) phones ORDER BY phones.number
不起作用,因为结果表需要对列进行排序(这是无效的,因为它导致列表不符合 Person 对象列表的条件),而且我似乎无法使用嵌套的 SELECT 语句来生成结果集,然后从中提取 Person 对象列表。有什么简单的方法可以做到这一点?
【问题讨论】: