【发布时间】:2020-11-06 13:41:12
【问题描述】:
我需要在两个相关表之间形成一个查询,以获取所有不相关的记录和那些也相关的记录。
Person 表有 @OneToMany 和 company 表。
该人的每条记录,可能与许多公司关联,也可能不关联,例如,在人员表中,一条记录在公司表中有五个关联记录,我需要通过为其分配重复五次来获取此记录公司表中的数据。 我遇到的问题是我只获得了一个人的记录,而该人的@OneToMany List 具有与之关联的其他记录。
如示例中所示,我想获取该人的 5 条重复记录,每条记录与不同的公司相关联,以及与任何公司无关的人员
Person Company
ID Name ID Name TableAID
1 Name one 1 Name tableB1 1
2 Name two 2 Name tableB2 1
3 Name three 3 Name tableB3 1
4 Name four 4 Name tableB4 2
5 Name five 5 Name tableB5 3
List personList = "从 Person 中选择人员 ...."
ID
Person_1 : id-1 姓名一/公司 (1)
Person_1 : id-1 姓名一/公司 (2)
Person_1 : id-1 姓名一/公司 (3)
Person_2 : id-2 姓名二/公司 (4)
Person_3 : id-3 姓名三 / 公司 (5)
Person_4 : id-4 姓名四/ 公司 (null)
Person_5 : id-5 姓名五/公司(空)
我的解决方案:
我不得不收集对象列表并手动解析我需要的值,而不是像这样收集实体。
之前: 列出 personList = query.getResultList();
之后: List
每个数组都是我从查询中返回的值,例如:
Select person, company from Person person left join Company company on
company.person = person.company
Object[] objectOne = [person, company];
Object[] objectTwo = [person, company];
对于数组的每个值我都投射了相同的实体,例如:
Person person = (Person) objectOne[0];
Company company = (Company) objectOne[1];
【问题讨论】:
-
我不知道。当 JPA 及其 @OneToMany 关系正是为这种情况而发明的时,为什么要强制您的数据库向您发送冗余数据。只需查询人员。然后每个 person.getCompanies() 都会懒惰地查询这些公司。会产生更多查询,但流量会更少。
-
我需要这样做,因为我要像这样在 html 表格中显示它,我需要对结果进行分页。如果我只从person表中获取所有记录,分页没有正确完成,一些记录会丢失,不会显示在html表中