spring - 使用带有 DTO 投影的实体图,使用 ResultTransformer 返回空值
问题描述
您好,我是 jpa + 标准 API + hibernate 的新手..
我对在 jpa 标准 API 中使用 ResultTransformer 有疑问。
我有两个实体部门和员工。部门和员工之间的一对多映射。我想将实体图与 DTO 投影一起使用
1.部门
@Entity
@NamedEntityGraph(name = "departmentWithEmployee", attributeNodes = @NamedAttributeNode("setOfEmployee"))
@Table(name = "tblDepartment")
public class Department {
@Id
private String id;
private String name;
@OneToMany(mappedBy = "department")
private Set<Employee> setOfEmployee;
//....getter & setter
}
2. 员工
@Entity
@Table(name = "tblEmployee")
public class Employee {
@Id
private String id;
@ManyToOne
@JsonIgnore
private Department department;
private String firstName;
private String lastName;
//...getter & setter
}
部门DTO.java
public class DepartmentDTO implements Serializable {
private String id;
private String name;
private Set<EmployeeDTO> setOfEmployee;
//... getter & setter..
}
I am executing query with entity graph and I want to get all departments from database and serialize with DepartmentDTO.java
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<DepartmentDTO> criteria = builder.createQuery(DepartmentDTO.class);
Root root = criteria.from(Department.class);
criteria.select(root);
EntityGraph graph = entityManager.getEntityGraph("departmentWithEmployee");
List<DepartmentDTO> list = entityManager.createQuery(criteria).setHint("javax.persistence.fetchgraph", graph)
.unwrap(org.hibernate.Query.class).setResultTransformer(Transformers.aliasToBean(DepartmentDTO.class)).list();
当我得到列表的大小时,它会给我正确的结果,但它会给出具有空值的部门列表,例如
(在数据库中我总共有 3 个部门)
输出 :
[
{
"id": null,
"name": null,
"setOfEmployee": null
},
{
"id": null,
"name": null,
"setOfEmployee": null
},
{
"id": null,
"name": null,
"setOfEmployee": null
}
]
我得到所有具有空值的字段。
那么这里的问题是什么,使用ResultTransformer有什么错误吗?或者有什么更好的方法来执行这个查询,我可以使用 DTO 获取记录 ..?
解决方案
推荐阅读
- azure - 将 Azure 资源日志路由到多个 Log Analytics 工作区
- javascript - 我想在javascript中选中复选框时对数字求和
- arrays - 如何使用 SwiftyJSON 将数组转换为字典?
- swift - 如何在现有的 Cognito 用户池中获取生日?(放大 iOS)
- c - 用c实现冒泡排序程序
- c# - 如何最小起订量 IEnumerable
通过 Any() 条件检查 - multithreading - 尽管代码未在主线程上执行,但仍收到 NetworkOnMainThreadException
- python - AWS Device Farm IE 超时等待页面
- c - Linux Kernel Device Driver Write Callback 正在为设备驱动程序分配的整个内存空间写入数据
- javascript - 异步上传多个文件并在firebase存储问题中获取它们的url