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

Unable to locate appropriate constructor on class原因分析

2015-11-04 17:55 639 查看
http://blog.sina.com.cn/s/blog_4ad7c2540102uzkc.html

通常我们喜欢将hql查询结果封装到POJO对象

 syntax:

 select new POJO(id,name) from POJO ;

 这种封装需要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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: