Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL用于返回非实体pojo类的转换器_Java_Hibernate_Hql_Transform - Fatal编程技术网

Java SQL用于返回非实体pojo类的转换器

Java SQL用于返回非实体pojo类的转换器,java,hibernate,hql,transform,Java,Hibernate,Hql,Transform,您好,我正在尝试使用hibernate中的Transformers返回结果查询的非实体类 我的pojo班是 Hibernate代码是 public class TestPojo { private String id=null; private String companyname=null; private String fullname=null; private String empid=null; private String datea

您好,我正在尝试使用hibernate中的Transformers返回结果查询的非实体类

我的pojo班是

Hibernate代码是

    public class TestPojo {

    private String id=null;
    private String companyname=null;
    private String fullname=null;
    private String empid=null;
    private String dateallocated=null;
    public TestPojo() {

    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getCompanyname() {
        return companyname;
    }
    public void setCompanyname(String companyname) {
        this.companyname = companyname;
    }
    public String getFullname() {
        return fullname;
    }
    public void setFullname(String fullname) {
        this.fullname = fullname;
    }
    public String getEmpid() {
        return empid;
    }
    public void setEmpid(String empid) {
        this.empid = empid;
    }
    public String getDateallocated() {
        return dateallocated;
    }
    public void setDateallocated(String dateallocated) {
        this.dateallocated = dateallocated;
    }




        SQLQuery query = session.createSQLQuery("select t.id as id,t.companyname      as           companyname,e.fullname as fullname,e.empid as empid,ca.dateallocated as    dateallocated from   bw_tempclientdetails t,  bw_employee_details e, bw_clientallocation   ca   where  e.empid=ca.empid and  ca.companyname=t.companyname");

         query.addScalar("id");    
         query.addScalar("companyname");
         query.addScalar("fullname");
         query.addScalar("empid");
         query.addScalar("dateallocated");


query.setResultTransformer(Transformers.aliasToBean(TestPojo.class));
List<TestPojo> list=query.list();
公共类TestPojo{
私有字符串id=null;
私有字符串companyname=null;
私有字符串fullname=null;
私有字符串empid=null;
私有字符串dateallocated=null;
公共TestPojo(){
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getCompanyname(){
返回公司名称;
}
public void setCompanyname(字符串companyname){
this.companyname=companyname;
}
公共字符串getFullname(){
返回全名;
}
public void setFullname(字符串fullname){
this.fullname=fullname;
}
公共字符串getEmpid(){
返回empid;
}
public void setEmpid(字符串empid){
this.empid=empid;
}
公共字符串getDateallocated(){
返回日期分配;
}
公共void setDateallocated(字符串dateallocated){
this.dateallocated=dateallocated;
}
SQLQuery query=session.createSQLQuery(“选择t.id作为id,t.companyname作为companyname,e.fullname作为fullname,e.empid作为empid,ca.dateallocated作为dateallocated从bw_tempclientdetails t,bw_employee_details,bw_clientallocation ca其中e.empid=ca.empid和ca.companyname=t.companyname”);
addScalar(“id”);
addScalar(“companyname”);
query.addScalar(“全名”);
addScalar(“empid”);
addScalar(“dateallocated”);
setResultTransformer(Transformers.aliasToBean(TestPojo.class));
List=query.List();
但是当我运行我的应用程序时,我得到了这个错误。 org.hibernate.PropertyAccessException:IllegalArgumentException在调用org.bluewhale.model.TestPojo.id的setter时发生


在此处输入注释中提到的代码

:-

query.addScalar("id",Hibernate.STRING);
query.addScalar("companyname",Hibernate.STRING); 
query.addScalar("fullname",Hibernate.STRING); 
query.addScalar("empid",Hibernate.STRING); 
query.addScalar("dateallocated",Hibernate.STRING);
query.addScalar("status",Hibernate.STRING); 
query.setResultTransformer(Transformers.aliasToBean(TestPojo.class)); 
list=query.list();
说明

为了一般解释,Hibernate选择了最合适的数据表示方式。因此我假设
id
以数字格式存储。因此Hibernate将它们视为
Long
aliasToBean
方法调用默认构造函数来生成
TestPojo
对象。然后进行搜索为setter方法的自推断类型创建一个es。在这种情况下,它可能会搜索带有签名的方法

  public void setId(Long id)
此调用转到重载方法
public void setId(String id)

由于
Long
不是
String
,因此您会得到一个
IllegalArgumentException

您在解决方案中所做的是显式定义要作为类型
String
的值,因此现在Hibernate使用的setter方法变成了
public void setId(String id)
,从而解决了您的问题


请注意:-如果要使用
addScalar()
则需要将其用于所需的所有数据成员。

问题已解决query.addScalar(“id”,Hibernate.STRING);query.addScalar(“companyname”,Hibernate.STRING);query.addScalar(“fullname”,Hibernate.STRING);query.addScalar(“empid”,Hibernate.STRING);query.addScalar(“dateallocated”,Hibernate.STRING);query.addScalar(“status”,Hibernate.STRING);query.setResultTransformer(Transformers.aliasToBean(AllocatedClients.class));list=query.list();干杯!!