【发布时间】:2018-07-22 17:17:15
【问题描述】:
我使用 Spring Boot 作为 REST 后端应用程序。假设 Person 有 Cats 和 Dogs,并且 Cat 和 Dog 都与 Person 存在多对一的关系。这样,Cat 和 Dog 就有了 Person id 作为外键。由于我使用的是 Spring JPA 存储库和多对一关系,因此可以直接获取猫及其人员的列表和狗及其人员的列表。这些列表已转换为 json,我可以使用前端应用程序访问此人的数据。这是我的问题:
我想返回所有人的列表以及每个人的所有猫狗。
我猜 JPA Repository 没有我的请求的默认查询,所以我必须使用自定义查询。但是,我不知道如何制作它。我尝试了以下一种:
@Query("select p, c, d from Person p, Cat c, Dog d where c.person.id = :id and d.person.id = :id and person.id = :id")
List<Object[]> findAllPersonsWithCatsAndDogs(Integer id);
这个想法是为每个人运行 for 循环,并使用人的 id 来检索他的猫和狗。结果是对象列表,其中每个对象都有同一个人、他的一只猫和他的一只狗。我不喜欢这样,因为对于所有的人,我都有一份带着他们的猫和狗的人的名单。
如何获得一个所有人的列表以及每个人的所有猫和狗。
谢谢
以下是使之更清晰的映射:
@Entity
public class Person {
//there is no mappings because of unidirectional many to one
}
...
@Entity
public class Cat{
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
}
...
@Entity
public class Dog{
@ManyToOne
@JoinColumn(name = "person_id")
private Person person;
}
所以,我有多对一的单向,这意味着 Person 看不到猫和狗。
【问题讨论】:
-
你能展示你的实体映射java类吗?
-
是的,我将它们添加到原始问题中。
标签: json spring spring-data-jpa jpql many-to-one