2011-08-09 5 views
1

こんにちは、私は、ハイバネートのトランスフォーマーを使用して結果のクエリの非エンティティクラスを返そうとしています。非エンティティのpojoクラスを返すためのSQLトランスフォーマー

私の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

のセッターを呼び出している間はIllegalArgumentExceptionが発生したが、ここで

+0

解決された問題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(); よろしく! –

答えて

2

をコードを入力してください: -

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) 

と方法を探し、このコールはLongStringではありませんので、あなたがIllegalArgumentExceptionを取得するオーバーロードされたメソッドpublic void setId(String id)

に行きます。
解決策で行ったことは明示的にタイプStringとみなされる値を定義しています。したがって、Hibernateで使用されるセッターメソッドはpublic void setId(String id)になり、問題を解決します。

注:addScalar()を使用する場合は、必要なすべてのデータメンバーに使用する必要があります。

関連する問題