Трансформеры для SQL возвращают не-сущностный класс pojo - PullRequest
1 голос
/ 09 августа 2011

привет, я пытаюсь вернуть не сущностный класс результирующего запроса, используя Transformers в hibernate.

Мой класс pojo

Код гибернации

    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: IllegalArgumentException произошло при вызове установщика org.bluewhale.model.TestPojo.id

введите код здесь

1 Ответ

2 голосов
/ 19 ноября 2012

Как уже упоминалось в ваших комментариях: -

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 выбирает наиболее подходящий способ представления данных. Поэтому я предполагаю, что IDs хранятся в числовом формате. Следовательно, Hibernate считает их Long. Метод aliasToBean вызывает конструктор по умолчанию для создания объекта TestPojo. Затем он ищет методы-установщики для своих самообнаруженных типов. В этом случае, вероятно, он ищет метод с подписью

  public void setId(Long id)

этот вызов переходит к перегруженному методу public void setId(String id)

Поскольку Long не String, вы получаете IllegalArgumentException.
То, что вы сделали в решении, явным образом определило значения, которые будут приняты как тип String, следовательно, теперь метод установки, используемый Hibernate, становится public void setId(String id), следовательно, решая вашу проблему.

Обратите внимание: - Если вы хотите использовать addScalar(), вам нужно использовать его для всех необходимых членов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...