Выберите один элемент из базы данных с помощью Spring Hibernate Sessionfactory - PullRequest
10 голосов
/ 16 сентября 2011

Это в моем DAO:

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

Это получает все элементы из таблицы Weather.Но допустим, я хочу сделать что-то вроде этого (я хочу только один элемент из таблицы Погода):

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

Я знаю, что не должно быть list() в конце, но что я должен написать там, чтобы получить только один объект?

Ответы [ 3 ]

11 голосов
/ 16 сентября 2011

Если у вас есть идентификатор, вы просто используете get:

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

Если вам нужно выполнить запрос, да, вам придется взять верхнюю часть набора результатов, или вы можете использовать uniqueResult() в запросе.

10 голосов
/ 16 сентября 2011

Что-то не так с получением списка?:) Даже если вы знаете, что есть только 1 спящий режим, вы не можете этого допустить.Получение списка безопаснее в любом случае!

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));
}
0 голосов
/ 29 ноября 2016

Вам необходимо использовать 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();
...