Использование Entity Graph с DTO Projection с помощью ResultTransformer возвращает нулевое значение - PullRequest
0 голосов
/ 12 июня 2018

Здравствуйте, я новичок в 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 ..?

...