您的位置:首页 > 移动开发

Unable to locate appropriate constructor on class

2016-04-06 15:25 686 查看
通常我们喜欢将hql查询结果封装到POJO对象

syntax:

select new POJO(id,name) from POJO ;

Unable to locate appropriate constructor on class

这种封装需要POJO类提供对应构造器,POJO(id,name)构造方法。

但使用中经常会抛这样的异常:Unable to locate appropriate constructor on class。

出现这个异常需要检查以下几种情况:

1)参数构造器的参数类型是否正确

2)参数构造器的顺序和hql中的顺序是否一致

3)参数构造器的参数个数是否和hql中的个数一致

4)参数构造器的参数类型是否TimeStamp

其中第4种情况较为复杂

这里提供参数构造器的参数类型是TimeStamp的解决方法:

super.getHibernateTemplate().find("select new Student(id,name,date) from Student");

实体类:

public class Student {

private Long id;

private String name;

private String address;

private Timestamp date;

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Timestamp getDate() {

return date;

}

public void setDate(Timestamp date) {

this.date = date;

}

public Student() {

super();

}

//注意些处的构造方法

public Student(Long id, String name, Object date) {

this.id=id;

this.name = name;

this.date = stringToTimestamp(date.toString());

}

public static Timestamp stringToTimestamp(String dateStr){

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar cal = Calendar.getInstance();

try {

Date date = sdf.parse(dateStr);

date.getTime();

cal.setTime(date);

return new Timestamp(cal.getTimeInMillis());

} catch (ParseException e) {

e.printStackTrace();

}

cal.setTime(new Date());

return new Timestamp(cal.getTimeInMillis());

}

}

出处:http://blog.sina.com.cn/staratsky
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: