我需要在两个相关的表之间形成一个查询,以获取所有不相关的记录和那些也相关的记录。
个人表具有带有公司表的@OneToMany。
个人的每条记录,可能与许多公司关联,也可能不与之关联,例如,在个人表中,一条记录在公司表中有五条关联记录,我需要通过将公司表中的数据分配给它来重复获得这条记录五次。我遇到的问题是,我只得到这个人的一条记录,而这个人的财产@OneToMany List有其他相关记录。
我想获得,在这个例子中,重复的人的五个记录,每个记录都与不同的公司有关,还有与任何公司无关的人
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
列出人员列表=";从人员中选择人员">
ID
个人_1:id-1姓名一/公司(1(
人员_1:id-1姓名之一/公司(2:id-5名称五/公司(空(
我的解决方案:
我不得不收集对象列表并解析值,而不是像这样收集实体我需要人手。
之前:List personList=query.getResultList((;
之后:列表<对象[]>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];
您还没有展示如何映射Person和Company实体或它们的关系,但对于每一种关系,都有相反的一面。请尝试将其视为公司查询,而不是人员查询。
"选择个人,公司从公司加入公司。个人在哪里">
这将返回一个List<对象[]>其中每一行表示为对象数组,其中位置0是人,位置1是公司。
如果你只有一个人,同样的事情也会朝着另一个方向发展->映射的公司关系:
"选择个人,公司从个人加入个人。公司在哪里">