前段时间由于需求要添加报表数据,调整ireport后,打印pdf文件出现数据错位的情况,调试发现不是ireport问题,就查看了后台传送的数据,最后发现传送的对象属性值已经就是错位的,那就是获取对象时出的问题,查看了查询语句,发现问题了,查询时使用hql动态创建对象,但查询语句中对象的属性顺序跟该对象带参构造函数中传参的顺序没有一一对应,也就是,比如以下对象User:
public class User { priavte Integer id; private String name; private String age; private String mobile; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age= age; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile= mobile; } public User(){} public User(Integer id,String name,String age,String mobile){ this.id= id; this.name=name; this.age=age; this.mobile=mobile; }}
hql查询动态创建对象时对象参数必须是:select new User(id,name,age,mobile) from User; 顺序必须一致,查询结果数据才不会错位。