2010-05-20 44 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();