zoukankan      html  css  js  c++  java
  • 【Hibernate】Unable to locate appropriate constructor on class原因分析

    通常我们喜欢将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");

     1 实体类:
     2 public class Student {
     3 private Long id;
     4 private String name;
     5 private String address;
     6 private Timestamp date;
     7 public Long getId() {
     8    return id;
     9 }
    10 public void setId(Long id) {
    11    this.id = id;
    12 }
    13 public String getName() {
    14    return name;
    15 }
    16 public void setName(String name) {
    17    this.name = name;
    18 }
    19 public String getAddress() {
    20    return address;
    21 }
    22 public void setAddress(String address) {
    23    this.address = address;
    24 }
    25 public Timestamp getDate() {
    26    return date;
    27 }
    28 public void setDate(Timestamp date) {
    29    this.date = date;
    30 }
    31 public Student() {
    32    super();
    33 }
    34 //注意些处的构造方法
    35 public Student(Long id, String name, Object date) {
    36 this.id=id;
    37    this.name = name;
    38    this.date = stringToTimestamp(date.toString());
    39 }
    40 
    41 public static Timestamp stringToTimestamp(String dateStr){
    42  
    43    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    44    Calendar cal = Calendar.getInstance();
    45    try {
    46     Date date = sdf.parse(dateStr);
    47     date.getTime();
    48     cal.setTime(date);
    49     return new Timestamp(cal.getTimeInMillis());
    50    } catch (ParseException e) {
    51     e.printStackTrace();
    52    }
    53  
    54    cal.setTime(new Date());
    55    return new Timestamp(cal.getTimeInMillis());
    56 }
    57 }

    出处:http://blog.sina.com.cn/s/blog_4ad7c2540102uzkc.html

    脚踏实地,仰望星空。
  • 相关阅读:
    选择适合什么模式
    Filter做用户授权的例子
    分析LogFilter
    理解session
    XML定义用途
    web服务后台应用工作原理
    企业级应用和互联网应用的区别
    轻量级Java EE企业应用实战的目标
    软件工程期末项目总结
    软件工程之学习报告
  • 原文地址:https://www.cnblogs.com/sijizhen/p/10042415.html
Copyright © 2011-2022 走看看