来自休眠实体的For循环未按预期返回结果

时间:2018-07-24 19:08:21

标签: java spring hibernate

我有一个在Hibernate 4.3.5中定义的实体,我试图在控制器中获取值,以便可以在JSON响应中显示它。但是我的for循环内容打印在一些 如下所示:

代码中System.out.println(emp.toString()+"\n");的结果:

abc.cde.myproject.orm.Employee@599eeded

abc.cde.myproject.orm.Employee@75ffa715

abc.cde.myproject.orm.Employee@152beb23

abc.cde.myproject.orm.Employee@1f2f7ce1

abc.cde.myproject.orm.Employee@484ca3df

这是我使用循环的控制器代码:

@RequestMapping(value="/get_employee_details", method=RequestMethod.GET)
    public String updateemployee
    (
            @RequestParam(value="emp_id", defaultValue="0") Integer emp_id,
            @RequestParam(value="name", defaultValue="") String name
    ) 
    {
        String responseJSON = null;
        boolean getStatus = true;       
        try {
            EmployeeDao employeeDao = (EmployeeDao)context.getBean("employeeDao");
            Employee employee = null;           
            List<Employee> empList = employeeDao.findByEmployeeId(emp_id);
            if ((empList != null) && (!empList.isEmpty())) {


                for(Employee emp : empList){
                System.out.println(emp.toString()+"\n");
            }

            if (getStatus) {
                    responseJSON = GenericOrmStatusView.OrmResponseToJsonString(true, 1,"List of Names here", true);
                } else {
                    responseJSON = GenericOrmStatusView.OrmStatusToJsonString(false, "Update of EMPLOYEE Record Problem!", true);
                }
            }                       
        } catch (Throwable th) {
            th.printStackTrace();
            responseJSON = GenericOrmStatusView.OrmStatusToJsonString(false, th.getMessage(), true);
        }

        return responseJSON;
    }

我的雇员实体如下:

@Entity
@Table(name="EMPLOYEE") 
public class Employee 
{       
    public int getEmployeeId() {
        return EmployeeId;
    }

    public void setEmployeeId(int EmployeeId) {
        this.EmployeeId = EmployeeId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Id
    @Column(name="Employee_ID")
    @GeneratedValue(strategy=GenerationType.AUTO, generator="seqgen")
    @SequenceGenerator(name="seqgen", sequenceName="Employee_AUTOINC_SEQ")
    private int EmployeeId; 

    @Column(name="NAME")
    private String name;



}

这就是DAO中findByEmployeeId方法的定义方式:

public List<Employee> findByEmployeeId(int empID);

由于我已经在此处对ID和字符串内容进行了硬编码:

responseJSON = GenericOrmStatusView.OrmStatusToJsonString(true, 1,"List of Names here", true);

我可以看到现在正在打印以下JSON:

{
  "status" : "SUCCESS",
  "workflowStatusID" : 1,
  "workflowStatus" : "List of Names here"
}

但是,我要传递所有ID和名称列表,而不是进行硬编码,以便可以在JSON响应中显示所有内容。在执行此操作之前,我需要使用for循环正确检索结果。

在上面的控制器代码中的for循环中我怎么了?

谢谢

2 个答案:

答案 0 :(得分:1)

您必须重写Employee类中的toString才能以所需方式打印Employee实例(例如,使用println)。

@Override
public String toString() {
Gson gson = new Gson();
String json = gson.toJson(this);
return json;
}

您可以使用Gson之类的库来将POJO格式化为json字符串

希望这会有所帮助

答案 1 :(得分:1)

如果在不覆盖toString()方法的对象中使用toString(),则将打印出

<class name of object that you are creating>@<hashcode value in hexadecimal format returned by the hashCode() method of Object class>.

您可以获得有关toString()here

的详细信息

像这样打印:

System.out.println(new ObjectMapper().writeValueAsString(emp));