Java Jpa-如何使用重复数据的Jpa执行查询

Java Jpa-如何使用重复数据的Jpa执行查询,java,sql,jpa,Java,Sql,Jpa,我需要在两个相关的表之间形成一个查询,以获取所有不相关和也相关的记录 Person表有@OneToMany和company表 人员的每条记录可能与许多公司关联,也可能与许多公司无关,例如,在人员表中,一条记录在公司表中有五条关联的记录,我需要通过从公司表中为其分配数据来获得该记录,重复五次。 我的问题是,我只得到一个记录的人和财产,@OneToMany名单的人,有其他记录与之关联 我想获得,如示例中所示,五个重复记录的人,每个人都与不同的公司有关联,也包括与任何公司没有关联的人 Person

我需要在两个相关的表之间形成一个查询,以获取所有不相关和也相关的记录

Person表有@OneToMany和company表

人员的每条记录可能与许多公司关联,也可能与许多公司无关,例如,在人员表中,一条记录在公司表中有五条关联的记录,我需要通过从公司表中为其分配数据来获得该记录,重复五次。 我的问题是,我只得到一个记录的人和财产,@OneToMany名单的人,有其他记录与之关联

我想获得,如示例中所示,五个重复记录的人,每个人都与不同的公司有关联,也包括与任何公司没有关联的人

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=“从人员中选择人员…”

个人\u 1:id-1姓名/公司(1)
个人\u 1:id-1姓名/公司(2)
个人\u 1:id-1姓名/公司(3)
个人2:id-2姓名二/公司(4)
人物3:id-3说出三个人/公司(5)
个人4:id-4姓名四/公司(空)
个人5:id-5姓名五/公司(空)

我的解决方案:
我不得不收集对象列表并解析值,而不是像这样收集实体​​我需要人手

之前: List personList=query.getResultList()

之后: List personList=query.getResultList()

每个数组都是值​​我从查询返回的,例如:

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];
对于数组的每个值,我将强制转换相同的实体,例如:

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];

你还没有展示你是如何映射个人和公司实体,或者他们的关系的,但是对于每一种关系,事情都有相反的一面。试着将其视为公司查询,而不是个人查询

“从公司中选择人员、公司加入公司。人员人员,其中…”

这将返回一个列表,其中每一行表示为一个对象数组,其中位置0为人员,位置1为公司

如果您只映射了person->company关系,则会出现同样的情况:


“从person join person.companys companys where…”中选择个人、公司我不知道。既然JPA及其@OneToMany关系正是为这种情况而发明的,为什么还要强迫数据库向您发送冗余数据呢。只需查询人员。然后,每个person.getcompanys()将惰性地查询这些公司。将产生更多的查询,但流量更少。我需要这样做,因为我将在html表中显示它,像这样,我需要对结果进行分页。如果我仅从person表中获取所有记录,则分页未正确完成,一些记录将丢失,并且不会显示在html表中。谢谢您的评论。我更新了de问题,我找到了一个可能的解决方案,它对我有效。