有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从关系中仅检索属性而不是实体?

我在Netbeans中从事一个maven web应用程序项目,我有以下课程:

@Entity
@Table(name = "departments")
public class Department{
    @Id
    private Integer departmentId;
    @Column(name = "department_name")
    private String departmentName;
}

以及:

@Entity
@Table(name = "employees")
public class Employee {
    @Id
    private Integer employeetId;
    @Column(name = "employee_name")
    private String employeeName;
    @JoinColumn(name = "department_id", referencedColumnName = 
    "department_id")
    @ManyToOne(optional = false)
    private Departments department;
}

我的rest api返回以下内容:

{
    employeeId:1, 
    employeeName:"Jhon",
    department: { departmentId:1, departmentName:"IT"}
}

我期望的输出是:

 {
    employeeId:1, 
    employeeName:"Jhon",
    department: "IT"
 }

我尝试返回DTO,但得到的是空json:

@GET
@Produces(MediaType.APPLICATION_JSON)
public List<EmployeeDto> findAllEmployees() {
    CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery(Employee.class);
    cq.select(cq.from(Employee.class));
    List<Employee> employees = entityManager.createQuery(cq).getResultList();
    List<EmployeeDto> employeesDto = new ArrayList<>();

    for (Employee employee : employees) {
        EmployeeDto employeeDto = new EmployeeDto();
        employeeDto.employeeId = employee.getEmployeedId();
        employeeDto.department = employee.getDepartment().getDepartmentName();

        employeesDto.add(employeeDto);
    }
    return   employeesDto;

DTO:

Class EmployeeDto{Integer employeeId; String employeeName; String department}

共 (2) 个答案

  1. # 1 楼答案

    这是因为我得到了一个空的json:我的Dto类没有公共的getter和setter。 解决方案是将Dto字段公开或添加公共getter/setter

    Class EmployeeDto{
        public Integer employeeId; 
        public String employeeName; 
        public String department;
    }