使用Criteria从DB中选择特定字段?

时间:2015-05-25 08:57:35

标签: java hibernate hibernate-criteria

我有一个类似下面的方法

public List<String> getSimilarResourceNames(String resourceName){
    String searchString = "%"+resourceName+"%";
    Session session = getSession();
    Criteria criteria = session.createCriteria(Resource.class);
    criteria.add(Restrictions.like("name", searchString));
    return  criteria.list()
}

这将从数据库返回整个资源,但我需要的只是资源的名称。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:3)

使用Projection,您可以在Hibernate documentation中找到示例。

Criteria criteria = session.createCriteria(Resource.class);
criteria.setProjection(Property.forName("name"))
criteria.add(Restrictions.like("name", searchString));

答案 1 :(得分:2)

使用Projection,您将Pojo设置为默认值,从而获得其他字段(您未通过Projection获得)。在HQL中,您可以获得指定的列值,如下所示:

Query query = session.createQuery("select u.fullname from Users u");
List<Object[]> rows = query.list();
List<String> fullnames = new ArrayList<String>();
for (Object[] row: rows) {
    fullnames.add(row[0]);
}

我希望这会对你有所帮助。