java - 从 entityManager.createQuery() 获取特定字段的响应加入 springboot API 的结果
问题描述
我正在使用带有 JPA 的 springboot 来创建 REST API。我想从学生那里获取所有详细信息,并从地址中获取匹配行(如果存在)。
下面是我的服务实现
EntityManager entityManager = entityManagerFactory.createEntityManager();
query = entityManager.createQuery("select s , a from Student s " +
" left join Address a " +
" on s.id = a.student ")
@SuppressWarnings("unchecked")
List<Object> list = query.getResultList();
下面是我的学生实体
@Entity
class Student{
private int id,
private String name,
@ManyToOne(optional = false)
@NotNull
@JsonIgnoreProperties(value = "student", allowSetters = true)
private User user; // User another entity
--- getter and setter --
}
以下是我的地址实体
class Address{
private int id;
private String addressLine;
@ManyToOne(optional = true)
@JsonIgnoreProperties(value = "address", allowSetters = true)
private Student student;
--- getter and setter --
}
所以它会返回所有匹配的具有如下关系属性的行
[{
id :1,
name: "qwert",
user:{
id: 1,
createdBy:1
createdOn:2021-08-21
}
}
{
id: 1,
addressLine:"kkkkk",
student{
id :1,
name: "qwert",
user{
id: 1,
createdBy:1
createdOn:2021-08-21
}}}]
**I want output be like below**
[
{
id :1,
name: "qwert",
user:{
id: 1
}},
{
id: 1,
addressLine:"kkkkk"
}]
我们怎样才能做到这一点?我尝试使用 POJO 但无法实现。我是 Springboot 和 JPA 的初学者。是否有另一种方法可以从不相关的实体获取数据并返回带有特定字段的 POJO。
解决方案
这应该有效:
List<Object[]> list = query.getResultList();
for (Object[] element: list) {
Student s = element[0|;
Address a = element[1];
//.... do whatever necessary to save result to dto list
}
推荐阅读
- javascript - 当它们具有不同的属性时,如何从 for 循环创建多个对象?
- django - 从另一个模板调用 django 视图
- python - Can this solution to "Contains Duplicate" be done more Pythonically?
- azure - DotNetCoreCLI 可以构建解决方案吗?
- reactjs - 仅获取前 x 个元素 JavaScript / React
- c++ - 将模板类的实例添加到向量 (C++)
- java - 锁定文件系统上的并发访问
- html - 如何将 :hover 添加到导航栏上的图像?
- javascript - 带有 Javascript 和 MYSQL 的 Springboot
- angular - 如何在Angular 10中将字符串变量扩展为html内容?