如何在Hibernate Criteria中返回特定类型而不是List <object []>?

时间:2017-02-15 13:35:37

标签: java 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;
}

因此数据库中还有两个表:user和article。我尝试使用Criteria获取数据:

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

但是返回的列表不是List<article>,它是List<Object>包含ARTICLE和USER,我不知道如何从列表中获取ARTICLE数据。如果我设置了FetchType.Lazy,那么返回的列表将为List<article>而没有USER数据,但我还需要USER数据......

2 个答案:

答案 0 :(得分:3)

Criteria Hibernate类list()方法返回一个原始List。所以,如果你试图施放 它会得到一个未经检查的警告。

  

但是返回的列表不是L​​ist,它包含一个List包含ARTICLE和USER

它不包含文章和用户,它只包含您在创建条件时传递的类型。在这种情况下:

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

返回的列表将包含文章对象。

您可以通过不同方式获取文章列表:

最简单的一个:

//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命名约定的大写字符开头。文章 - &gt;文章,用户 - &gt;用户

答案 1 :(得分:1)

使用Projection或ResultSetTransformer:

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

谷歌很容易。