2017-07-10 8 views
0

JPA 2.1では、JPQLクエリの結果をカスタムPOJOオブジェクトに変換する必要があります。JPA Transformer for JPQLクエリ結果

私は以下の解決策を認識していますが、にネイティブSQLクエリがないので使用できません。

私のDAOクラスで次に
@Entity 
@Table("USER_T") 
@SqlResultSetMapping(name="SearchResult", classes = { 
     @ConstructorResult(targetClass = InternalUser.class, 
     columns = {@ColumnResult(name="userId"), @ColumnResult(name="firstName"), 
       @ColumnResult(name="lastName"), @ColumnResult(name="role") 
     }) 
    }) 

javax.persistence.Query query = entityManager.createNativeQuery(jpql, "SearchResult"); 

私はこのアプローチをとることにした場合jpql変数がネイティブSQLではないので、私はSQL例外になるだろう。これにはJPQL式が含まれており、Where句やOrder-Byでカスタムフィールドを指定するなどの「エキストラ」を使用できます。

createNativeQuery(strQuery, strMapping)の代わりにcreateQuery(strQuery, strMapping)が必要ですが、それは存在しません。助言がありますか?結果をカスタムPOJOに変換する必要があります。 JB Nizetの先端パー

+1

'select新しいSearchResult(...)から'を追加しました。 –

+0

ありがとう、構文は、 'select new(..)'の結果のClassNameでした –

答えて

0

、JPQL自動変換構文は

private static final String SEARCH_JPQL = "select new mydomain.InternalUser(" + 
         " users.id as userId, " + 
         " abc.preferredFirstname as firstName, " + 
         " abc.preferredLastname as lastName, " + 
         " users.role as role) " + 
    " from ... " 

で選択中のクラス名は、結果セットを受信するためのPOJOです。 しかし、それをサポートするコンストラクタが必要でした。だから私は

public InternalUser(String userId, String firstName, String lastName, String role) { 
    this.userId = userId; 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.role = role; 
} 
関連する問題