EclipseLink的所有属性都显示为JSON

时间:2015-07-04 07:07:47

标签: json jpa eclipselink jpa-2.0

我在Entity类中有以下JPQL

select new test.entity.Emp(o.empNo, o.empName) from Emp o

和服务层

@GET
@Path("/results")
@Produces(MediaType.APPLICATION_JSON)
public List<Emp> findAll() {
    Query query =             getEntityManager().createNamedQuery("Emp.findAll");
    List<Emp> result = query.getResultList();
    return result;
}

但是,当我运行时,所有属性都显示在JSON结果中,而不是empNoEmpName

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

您的查询返回新的Emp对象(仅由empNo和empName构造),因此这将是您的JSON字符串的结果 - 整个Emp对象。

创建一个这样的类:

public class EmpDTO {
    private String empNo; //or whatever datatype you use...
    private String empName;

    public EmpDTO(String empNo, String empName) {
        this.empNo = empNo;
        this.empName = empName;
    }

    //getters and setters
}

然后编辑您的查询以在构造函数表达式中使用此类(将包从test.dto更改为您创建类的任何内容):

select new test.dto.EmpDTO(o.empNo, o.empName) from Emp o

最后编辑你的代码:

...
public List<EmpDTO> findAll() {
    Query query = getEntityManager().createNamedQuery("Emp.findAll");
    return query.getResultList();
}

BTW:Emp.findAll不是命名查询的理想名称。