Здравствуйте, я новичок в jpa + API критериев + hibernate ..
У меня есть сомнения, связанные с использованием ResultTransformer в API критериев jpa.
У меня два подразделения Department и Employee.отображение один на много между отделом и сотрудником.я хочу использовать entitygraph с проекцией 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
}
DepartmentDTO.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 ..?