3

私はJPAAPI(Hibernate-backed)を使用しており、次のコードを使用しています。

public List<?> getGenericListing(Class<?> clazz) {
    //Other logic comes before...
    Query qry = entityManager.createNativeQuery(sql, clazz);
    return qry.getResultList(); //Returns an untyped list, part of JPA spec
}

public List<SpecificObject> getSpecificListing() {
    return (List<SpecificObject>) getGenericListing(SpecificObject.class);
}

List<?>特定オブジェクトのリストに対して型キャストする以外に、それを返すためのより良い方法はありますか?

4

3 に答える 3

6

キャストをgetGenericListing次の場所に配置できます。

public <T> List<T> getGenericListing(Class<T> clazz) {
    //Other logic comes before...
    Query qry = entityManager.createNativeQuery(sql, clazz);
    return (List<T>) qry.getResultList(); //Returns an untyped list, part of JPA spec
}
于 2012-10-16T07:23:31.610 に答える
3

あなたのSQLの性質は何ですか?動的クエリ機能が必要ない場合は、次のソリューションを使用できます。

public <T> List<T> getGenericListing(Class<T> clazz) {
    //Other logic comes before...
    TypedQuery<T> qry = entityManager.createNamedQuery(sql, clazz);
    return qry.getResultList();
} 

ここで、'sql' は NamedNativeQuery の名前です。たとえば、次のように宣言されます。

@NamedNativeQuery( 
    name="sql_name", 
    query="SELECT * " + 
          "FROM foo_table t " + 
          "WHERE t.foo_field = ? ", 
    resultClass=fooEntityClass.class 
) 
于 2012-10-16T08:04:33.103 に答える