2010-05-20 27 views
2

如何編寫DAO方法,該方法僅返回數據庫中的第一個條目。比如讓說,我期待在用戶表,我只想檢索第一個條目,我想聲明的方法,如:DAO方法檢索單個條目

public User getFirstUser(){ 
    //method logic 
} 

編輯:

用戶有主鍵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; 
      } 
    } 

回答

2

您可以

  • 使用:

    Query query = session.createQuery("from User"); 
    query.setMaxResults(1); 
    User result = (User) query.uniqueResult(); 
    
  • 使用User user = session.get(User.class, id);如果您知道ID的前面。

+3

對不起,但我必須downvote這個答案:1. uniqueResult()將拋出一個異常,如果查詢返回多個結果(這很可能是從'用戶' )2.不要檢索所有用戶,如果只需要其中一個(如果表中有10個用戶呢?)3.不要使用不可移植的'LIMIT',使用'setMaxResults()'並讓Hibernate做好自己的工作。 – 2010-05-20 19:43:51

+0

謝謝,更新。 (6小時會議對人們做壞事:)) – Bozho 2010-05-20 20:39:27

+0

沒問題:) Downvote刪除。 – 2010-05-20 20:54:03

0

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

:)

+0

確定查詢如何實現呢?我會更新我的問題 – London 2010-05-20 11:20:48

0

不記得確切,但我認爲這是在JPA的方法getSingleResult還處於休眠所以...

但這種方法可能拋出異常時返回了多個結果...可以」不記得...

實際上也有getResultList返回實體列表,你可以做list.get(0)no?

或者用LIMIT 1創建一個查詢?

0

在MS SQL Server,我們不喜歡它,

用戶第一,分ID,

SELECT TOP 1 * FROM Users ORDER BY Id 

最新的用戶,最大的ID,

SELECT TOP 1 * FROM Users ORDER BY Id DESC 

感謝。

+0

是的。這也可以在sybase中使用。在oracle中,它將是來自rownum = 1的用戶的Select * – Nico 2010-05-20 11:57:25

2

得到所有用戶的ID有序和結果限制爲1(但不使用LIMIT,使用setMaxResults()保持便攜式):

Query q = session.createQuery("from User u order by u.id"); 
q.setMaxResults(1); 
User u = (User) q.uniqueResult();