gpt4 book ai didi

java - 带有列表字段的 Hibernate 自定义 DTO

转载 作者:行者123 更新时间:2023-12-02 09:02:48 24 4
gpt4 key购买 nike

我有 2 个实体

@Entity
public class DeptEmployee {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

private String employeeNumber;

private String designation;

private String name;

@ManyToOne
private Department department;

// constructor, getters and setters
}
@Entity
public class Department {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long id;

private String name;

@OneToMany(mappedBy="department")
private List<DeptEmployee> employees;

public Department(String name) {
this.name = name;
}

// getters and setters
}

我知道我可以像这样提取 DTO Result:

public class Result {
private String employeeName;

private String departmentName;

public Result(String employeeName, String departmentName) {
this.employeeName = employeeName;
this.departmentName = departmentName;
}

public Result() {
}

// getters and setters
}
Query<Result> query = session.createQuery("select new com.baeldung.hibernate.pojo.Result(m.name, m.department.name)"
+ " from com.baeldung.hibernate.entities.DeptEmployee m");
List<Result> results = query.list();

(感谢本文中的示例:https://www.baeldung.com/hibernate-query-to-custom-class)



现在我想提取一个 DTO,其中包含部门名称和该部门员工的姓名列表。

public class Result2 {
private String departmentName;

private List<String> employeeNames;

// Constructor ???

public Result2() {
}

// getters and setters
}

我的问题是:

  • 这可能吗?
  • Result2 中的构造函数是什么?
  • 提取此 Result2 的 hql 查询是什么?

最佳答案

我认为你无法在 HQL 中实现它。您可以使用已有的东西。重新映射 List<Result>List<Result2> 。第一组 departmentName之后您可以创建 Result2对象。 SQL查询和传输的数据将相当相同。

List<Result2> results= query.list().stream()
.collect(groupingBy(Result::getDepartmentName))
.entrySet().stream()
.map(e -> new Result2(
e.getKey(),
e.getValue().stream().map(Result::getEmployeeName).collect(Collectors.toList())))
.collect(Collectors.toList());

关于java - 带有列表字段的 Hibernate 自定义 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com