11

这是在我的 DAO 中:

public List<Weather> getCurrentWeather() {  
    return sessionFactory.getCurrentSession().createQuery("from Weather").list();
}

这会从表 Weather 中获取所有元素。但是可以说我想做这样的事情(我只想要表 Weather 中的一个元素):

public Weather getCurrentWeather() {    
    return sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list()
}

我知道最后不应该有 list() ,但是我必须在那里写什么,才能只得到一个对象?

4

3 回答 3

12

如果你有一个 id,你只需使用 get:

public Weather getCurrentWeather() {    
    return sessionFactory.getCurrentSession().get(Weather.class, 1); 
}

如果您确实需要进行查询,是的,您必须抓住结果集的顶部,或者您可以uniqueResult()在查询中使用。

于 2011-09-16T15:13:12.720 回答
10

获取清单有什么问题吗?:) 即使你知道只有 1 个hibernate 也不能假设。无论如何,获取清单更安全!

public Weather getCurrentWeather() {    
    List<Weather> list = sessionFactory.getCurrentSession().createQuery("from Weather where id = 1").list(); // here should be something else than list()
    return (list.isEmpty() ? null : list.get(0));
}
于 2011-09-16T15:20:18.333 回答
0

您需要使用 Criteria API,如下所示:

    List<LeaveManagement> leaveManagements =      session.createCriteria(LeaveManagement.class)
            .add( Restrictions.isNull("approvedTimeStamp") )
            .uniqueResult();

    If you want to write a hql query you can write as:

    String hql = "from LeaveManagement where approvedTimeStamp is null";
         Query query = session.createQuery(hql);
        LeaveManagement results = (LeaveManagement) query.uniqueResult();
于 2016-11-29T11:44:26.037 回答