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
通常我们喜欢将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
相关文章推荐
- Hibernate异常:Unable to locate appropriate constructor on class
- android 展示json数据中html格式的字段
- Unity3D-射线Ray
- WebView显示的网页在大分辨率屏下被放大--解决方案
- Android 性能优化
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- [转载]xcode APP 打包以及提交apple审核详细流程
- 芒果iOS开发之NSComparisonResult比较结果
- 微信支付提示缺少appid解决办法
- iosAPP测试概述
- android VelocityTracker用法
- Swift学习:闭包(Closures)
- 使用Android+smack4.1.4+openfire进行IM开发
- Swift(九、枚举)
- 如何在xcode7上打包越狱系统可用的ipa文件
- Python + Appium+ IOS自动化测试
- Android屏幕适配的一些常识
- 详解Swift编程中的方法与属性的概念
- Android 中webp 的使用
- Android之动画详解