2017-07-26 19 views
3

クエリから直接EmployeeFormにデータを取得することはできますか?結合されたテーブルから直接クラスにデータをフェッチする方法は?

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.emp.form.EmployeeForm 
+2

使用[JPA](http://docs.oracle.com/javaee/6/tutorial/doc/bnbpz.html)。 – zombie

+0

データベース内のテーブルではないエンティティを作成できると言っていますか? –

+0

はい、そのために 'ResultTransformer'を使用してください。 – zombie

答えて

1

あなたはResultTransformer

のThを使用する必要があります。

SELECT a.name,b.username,b.password FROM Tbemployee left join Tbuser 

コード

List<EmployeeForm> form = new ArrayList<EmployeeForm>(); 
    EmpDB service = (EmpDB) RuntimeAccess.getInstance().getServiceBean(
    service.begin(); 
    Session session = service.getDataServiceManager().getSession(); 
    SQLQuery query = session.createSQLQuery("EXEC empdata"); 
    List list = query.list(); 
    formList = list; 

empdataストアドプロシージャとしてクエリこれは私にエラーを与えます他のオプションは、クエリ結果の列を含む行を含むList<Object[]>にキャストし、次にデータを反復して抽出します(より多くの作業)。

変圧器のようなものが考えられます。オブジェクト/リレーショナルマッピングのために

query.setResultTransformer(Transformers.aliasToBean(EmployeeForm.class)); 
+0

これは動作しますが、日付カラムを追加するとエラーが出ます "org.hibernate.property.BasicPropertyAccessor - 予想されるタイプ:java.util.Date、実際の値:java。 lang.String "このresulttransformerはすべての値の文字列を返しますか? –

+0

いいえ、DB側のカラムが日付の場合は、日付とともに使用できます。 – isah

+0

エラーは消えました。私の日付はdatetimeなので、エラーの原因と思われる日付に変換するためにキャストを使用しましたか?ヌル値も受け入れますか? –

関連する問題