我明明在KhClient这个类中定义了构造器,可是运行的时候一直提示说:Unable to locate appropriate constructor on class [com.struts.form.KhClient],不知道哪里有问题,请大家帮帮忙
action的代码:objectDao = new ObjectDao<KhClient>();
String hql = "select new KhClient(k.CGrade,k.CDnumber,k.CDmoney,k.CClientname," +
"k.CPoint, k.CClientcard) from KhClient as k,XtClientGrade as x" +
" where k.CGrade=x.CKind and k.CDnumber>=x.CDnumber" +
" or k.CDmoney>=x.CDmoney or k.CPoint>=x.CPoint ";
List<KhClient> list =(List<KhClient>) objectDao.queryList(hql);
request.setAttribute("list", list);khClient.java的结构public class KhClient extends org.apache.struts.action.ActionForm implements
java.io.Serializable { // Fields private Integer CCid; private String CClientcode; private String CClientname; private String CSex; private Date CBirthday; private Long COld; private String CIdcard; private String CClientcard; private String CPassword; private Date CDate;
.....
//用到的构造器
public KhClient(String CGrade, Long CDnumber ,Double CDmoney,
Double CPoint,String CClientname, String CClientcard) {
this.CGrade = CGrade;
this.CDnumber = CDnumber;
this.CDmoney = CDmoney;
this.CClientname = CClientname;
this.CPoint = CPoint;
this.CClientcard = CClientcard;
}
不知道是不是数据类型有问题

解决方案 »

  1.   

    get()和set()在类里面有的,只是我没贴出来
      

  2.   

    你的实体类必须要有无参的构造函数,属性的第二个字母最好不要大写,即生成的set/get是getXxx()/setXxx()形式
      

  3.   

    Long CDnumber ,好像这个字段引起的,它是long类型
      

  4.   

    与构造器无关吧.映射对象只看get set方法,是用source生成的吗,不会字母有错吧?
      

  5.   

    第一,你必须有一个无参数的Constructor。如果的类里面没有Constructor的话,会有一个默认的无参数Constructor,但你写了一个,那个默认的就没有了,需要自己建一个无参数的。
    第二,你应该严格遵守JAVA的命名规则,一个变量命名是 xxxYyyZzz,第一个字母小写,随后每个单词的首字母大写;只有类名才会用到首字母大写。如果不遵守JAVA规则的话,你很有可能有小的拼写错误而造成Hibernate不能识别。