如何使用休眠条件仅返回对象的一个​​元素而不是整个对象?

Posted

技术标签:

【中文标题】如何使用休眠条件仅返回对象的一个​​元素而不是整个对象?【英文标题】:How to use hibernate criteria to return only one element of an object instead the entire object? 【发布时间】:2010-09-08 16:24:29 【问题描述】:

例如,我试图仅获取对象 bob 的 id 列表,而不是 bob 的列表。可以使用 HQL 请求,但我会知道是否可以使用标准?

一个例子:

final StringBuilder hql = new StringBuilder();
hql.append( "select bob.id from " )
    .append( bob.class.getName() ).append( " bob " )
    .append( "where bob.id > 10");

final Query query = session.createQuery( hql.toString() );
return query.list();

【问题讨论】:

【参考方案1】:

我认为您可以使用 Projections 来做到这一点,例如

Criteria.forClass(bob.class.getName())
        .add(Restrictions.gt("id", 10))
        .setProjection(Projections.property("id"))
        );

【讨论】:

【参考方案2】:

同样你也可以:

Criteria criteria = session.createCriteria(bob.class);

criteria.add(Expression.gt("id", 10));

criteria.setProjection(Projections.property("id"));

criteria.addOrder(Order.asc("id"));

return criteria.list();

【讨论】:

【参考方案3】:

或 setProjection(Projections.id())

【讨论】:

【参考方案4】:

http://www.devarticles.com/c/a/Java/Hibernate-Criteria-Queries-in-Depth/2/

【讨论】:

【参考方案5】:
SessionFactory sessionFactory;    
Criteria crit=sessionFactory.getCurrentSession().createCriteria(Model.class);
crit.setProjection(Projections.property("id"));
List result = crit.list();

此代码将为您提供模型类中的 id 列表,例如 [1,2,3]。 如果你想得到像["id":1,"id":2] 这样的数组列表,那么使用下面的代码

SessionFactory sessionFactory;    
Criteria crit=sessionFactory.getCurrentSession().createCriteria(Model.class); 
crit.setProjection(Projections.property("id").as("id")); 
List result = crit.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();

【讨论】:

【参考方案6】:

另一种选择(虽然有点不像休眠)是使用“原始”sql,如下所示:

List<Long> myList = session.createSQLQuery("select single_column from table_name")
          .addScalar("single_column", StandardBasicTypes.LONG).list();

【讨论】:

【参考方案7】:

你可以这样做

    bob bb=null;

    Criteria criteria = session.createCriteria(bob.class);  
    criteria.add(Restrictions.eq("id",id));

    bb = (bob) criteria.uniqueResult();

作为限制,您可以添加条件

【讨论】:

不是问题的答案,但对我来说很常用

以上是关于如何使用休眠条件仅返回对象的一个​​元素而不是整个对象?的主要内容,如果未能解决你的问题,请参考以下文章

将数组元素传递给消息框仅打印元素的第一个字符而不是整个字符串

Modal 显示整个 json 数据而不是仅显示一个元素

休眠条件排序依据

如何使用类属性映射休眠中的列?

spring data jpa 能不能只返回一个字段的值,而不是整个对象

如何从 Spring Optional 返回特定字段而不是整个对象? [关闭]