繁体   English   中英

如何返回特定类型而不是列表 <Object[]> 在休眠标准中?

[英]How to return specific type instead of List<Object[]> in 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。 我尝试使用条件获取数据:

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

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

Criteria Hibernate类的list()方法返回一个原始List。 因此,如果您尝试投射它,则会收到未经检查的警告。

但是返回的列表不是L​​ist,它是一个包含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);
   } 
}

看一下这篇文章: 将Hibernate Query.list()强制转换为List <Type>的“正确”方法是什么?

无论如何,对于Java命名约定,类名称必须以大写字母开头。 文章->文章,用户->用户

使用Projection或ResultSetTransformer:

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

谷歌很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM