2017-02-15 5 views
1

は、私はまた、データベースに2つのテーブルがある二つのクラス List <Object[]>の代わりに特定の型をHibernate Criteriaで返す方法はありますか?ユーザーと記事:

@Entity 
public class user implements Serializable{ 
... 
private Set<article> uploaded = new HashSet<article>(); 
... 
@OneToMany(mappedBy="uploader") 
public Set<article> getUploaded() { 
return uploaded; 
} 

@Entity 
public class article implements Serializable{ 
.... 
private user uploader; 
.... 
@ManyToOne 
public user getUploader() { 
    return uploader; 
} 

を持っています。私は基準を使用してデータを取得しよう:

tx = session.beginTransaction(); 
Criteria cr = session.createCriteria(article.class); 
... 
List<article> list = cr.list(); 

しかし、返されたリストは、それがList<Object>記事やUSERが含まだ、と私は、リストから記事データを取得する方法がわからない、List<article>ではありません。 FetchType.Lazyを設定した場合、返されるリストはUSERデータのないList<article>になりますが、USERデータも必要です。

答えて

3

Criteria Hibernateクラスlist()メソッドは、生のリストを返します。したがって、 をキャストしようとすると、未確認の警告が表示されます。

しかし、返されるリストリストではありません、それはリストのIT記事とユーザーの両方が含まれていない記事やUSER

が含まれている、それはあなたが基準を作成するときに渡されただけの種類が含まれています。この場合、

Criteria cr = session.createCriteria(article.class); 

返されるリストには記事オブジェクトが含まれます。

あなたはさまざまな方法で記事のリストを取得することができます。

最も簡単な1:

//Cast the raw list, but this will give you an unchecked warning 
List<article> list = (List<article>) cr.list(); 

それとも別のリスト内の値をコピーすることができます。これで

List<Object> list = cr.list(); 
List<article> articles = new ArrayList<article>(); 

for(Object object : list) { 
    if(object instanceof article) { 
     articles.add((article) object); 
    } 
} 

ルック投稿:What is the "proper" way to cast Hibernate Query.list() to List<Type>?

とにかく、クラス名は大文字で始まる必要がありますJava命名規則の文字。記事 - >条、ユーザー - >ユーザ

+0

ありがとうございました。私はいくつかのテストをしましたが、次のように動作します:List

articles = new ArrayList
(); (オブジェクト[]目的:リスト)のため \t \t \t { \t \t \t \t articles.add((記事)オブジェクト[1])。 \t \t \t} –

0

使用投影またはResultSetTransformer:

.setResultTransformer(Transformers.aliasToBean(article.class));

Googleに簡単です。

関連する問題