Java 生成的JSON中缺少JPA实体属性名称
我使用JPA,Jackson用于生成JSON Emp.javaJava 生成的JSON中缺少JPA实体属性名称,java,json,jpa,jackson,Java,Json,Jpa,Jackson,我使用JPA,Jackson用于生成JSON Emp.java @Entity @NamedQuery(name = "Emp.findAll", query = "select o.empNo, o.empName from Emp o ") @Table(name = "EMP") public class Emp implements Serializable { @Column(name = "ename") private String empName;
@Entity
@NamedQuery(name = "Emp.findAll",
query = "select o.empNo, o.empName from Emp o ")
@Table(name = "EMP")
public class Emp implements Serializable {
@Column(name = "ename")
private String empName;
@Id
@Column(name = "empno", nullable = false)
private String empNo;
.....
在服务类中,我有以下代码
@GET
@Path("/emplist")
@Produces(MediaType.APPLICATION_JSON)
public Object getEmployees() {
List<Emp> list = this.findAll();
ObjectMapper objectMapper = new ObjectMapper();
empAsJson = objectMapper.writeValueAsString(list);
public List<Emp> findAll() {
return getEntityManager().createNamedQuery("Emp.findAll").getResultList();
}
而如果我将Emp类中的namedQuery更改为
select o from Emp o
然后生成的JSON具有如下所示的属性名称
[{"empNo":"2390","empName":"JAMES"},
这可能是什么原因,我如何解决这个问题?不同之处在于,在查询
中,从Emp o选择o.empNo,o.empName
您选择特定的实体字段,并且每个结果行都是一个对象[]
。因此,指定属性的数组
第二个查询
select o from Emp o
选择整个实体及其所有字段,您看到的是JSON marashalled实体。区别在于,在查询select o.empNo,o.empName from Emp o
中,您选择了特定的实体字段,每个结果行都是一个对象[]
。因此,指定属性的数组
第二个查询
selecto from Emp o
选择整个实体及其所有字段,您看到的是JSON marashalled实体。在第一种情况下,您的JPQL返回一个列表
;列表中的每个项目都是一个数组,包含o.empNo
和o.empName
的值。当然,当生成JSON时,它将作为一个数组/项目列表生成
在第二种情况下,您会得到一个
列表
,其中每个项目都是员工
实例,因此它像对象一样被序列化(属性值列表)。在第一种情况下,您的JPQL返回一个列表
;列表中的每个项目都是一个数组,包含o.empNo
和o.empName
的值。当然,当生成JSON时,它将作为一个数组/项目列表生成
在第二种情况下,您会得到一个
列表
,其中每个项目都是一个员工
实例,因此它像对象一样被序列化(属性值列表)。命名查询选择o.empNo,o.Emp o
中的empName将返回列表
,其中as从Emp o中选择o
将返回列表
,因此相应地将生成json
您可以按如下所示更改查询
从Emp o中选择新Emp(o.empNo,o.empName)
并在类中相应地使用构造函数
或者尝试使用
从Emp o选择新映射(o.empNo作为empNo,o.empName作为empName)
命名查询从Emp o选择o.empNo,o.empName
将返回列表
其中as从Emp o选择o
将返回列表
,因此相应地将生成json
您可以按如下所示更改查询
从Emp o中选择新Emp(o.empNo,o.empName)
并在类中相应地使用构造函数
或者尝试使用
从Emp o选择新映射(o.empNo作为empNo,o.empName作为empName)
[{"empNo":"2390","empName":"JAMES"},