gpt4 book ai didi

java - SQL 的转换器返回非实体 pojo 类

转载 作者:行者123 更新时间:2023-11-30 05:00:17 24 4
gpt4 key购买 nike

嗨,我正在尝试在 hibernate 中使用 Transformer 返回结果查询的非实体类。

我的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();

但是当我运行我的应用程序时,我收到此错误。org.hibernate.PropertyAccessException:调用 org.bluewhale.model.TestPojo.id 的 setter 时发生 IllegalArgumentException

在此处输入代码

最佳答案

正如您的评论中提到的:-

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 将它们视为 LongaliasToBean 方法调用默认构造函数来创建 TestPojo 对象。然后,它搜索其自推导类型的 setter 方法。在这种情况下,它可能会搜索带有签名的方法

  public void setId(Long id)

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

由于 Long 不是 String,因此您会得到 IllegalArgumentException
您在解决方案中所做的就是显式定义要作为 String 类型的值,因此现在 Hibernate 使用的 setter 方法变为 public void setId(String id) 从而解决您的问题。

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

关于java - SQL 的转换器返回非实体 pojo 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7000843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com