Метод DAO извлекает одну запись - PullRequest
2 голосов
/ 20 мая 2010

Как мне написать метод DAO, который в результате вернет только первую запись из базы данных.Например, предположим, что я смотрю на таблицу Users и хочу получить только первую запись, я бы объявил метод следующим образом:

public User getFirstUser(){
    //method logic
}

EDIT:

У пользователя есть первичный ключ id , если это вообще имеет значение.

Я прошу прощения, если этот вопрос слишком прост / глуп / независимо от того, что я новичок в Java, поэтому я пробую новые вещи.спасибо

Моя попытка:

   public User getFirstUser(){
            try { 
                final String getQuery = "SELECT * FROM Users WHERE Id = (SELECT MIN(Id) FROM Users)"; 
                final Query query = getSession().createQuery(getQuery); 
                final int rowCount = query.executeUpdate(); // check that the rowCount is 1 
                log.debug("get successful"); 
//             return what??
            } catch (RuntimeException re) { 
                log.error("get not successful", re); 
                throw re; 
            } 
    }

Ответы [ 5 ]

2 голосов
/ 20 мая 2010

Получить всех пользователей, упорядоченных по идентификатору, и ограничить результаты до 1 (но не используйте LIMIT, используйте setMaxResults(), чтобы оставаться переносимым):

Query q = session.createQuery("from User u order by u.id");
q.setMaxResults(1);
User u = (User) q.uniqueResult();
2 голосов
/ 20 мая 2010

Вы можете

  • использование:

    Query query = session.createQuery("from User");
    query.setMaxResults(1);
    User result = (User) query.uniqueResult();
    
  • используйте User user = session.get(User.class, id);, если вы знаете идентификатор заранее.

0 голосов
/ 20 мая 2010

В MS SQL Server мы делаем это как

Первый пользователь, минимальный идентификатор,

SELECT TOP 1 * FROM Users ORDER BY Id

Последний пользователь, максимальный ID,

SELECT TOP 1 * FROM Users ORDER BY Id DESC

спасибо.

0 голосов
/ 20 мая 2010

Не помню точно, но я думаю, что есть метод getSingleResult в JPA, а также в Hibernate, так что ...

Но этот метод, возможно, генерирует исключение, когда возвращается несколько результатов ... не помню ...

На самом деле есть также getResultList, возвращающий список сущностей, и вы могли бы сделать list.get (0) нет?

Или создать запрос с LIMIT 1?

0 голосов
/ 20 мая 2010

SELECT * FROM Users WHERE Id = (SELECT MIN(Id) FROM Users)

:)

...