2014-03-25 38 views
-1

我所有的Hibernate类有一个类似的方法:获取项目作为一个Hibernate查询结果列表

@Transactional 
public DadosUsuario findById(int id) { 
    log.debug("getting DadosUsuario instance with id: " + id); 
    try { 
     DadosUsuario instance = (DadosUsuario) sessionFactory.getCurrentSession().get(DadosUsuario.class, id); 
     log.debug("get successful"); 
     return instance; 
    } catch (RuntimeException re) { 
     log.error("get failed", re); 
     throw re; 
    } 
} 

其结果为从表DadosUsuario一行与中的指定ID。我想从这个例子中得到一个变化,我可以从这个表中搜索其他字段(这是fk_usuario,fk_dados和conteudo)。

我尝试类似的东西:

@Transactional 
public DadosUsuario findByUsuario(Usuario user) { 
    log.debug("getting DadosUsuario instance with id: " + user.getLogin()); 
    try { 
     DadosUsuario instance = (DadosUsuario) sessionFactory.getCurrentSession().get(DadosUsuario.class, user); 
     log.debug("get successful"); 
     return instance; 
    } catch (RuntimeException re) { 
     log.error("get failed", re); 
     throw re; 
    } 
} 

但不工作(在methog获得不接受类型Usuario作为第二个参数)。我也尝试使用SQL查询,下面从本文的例子:

http://www.mkyong.com/hibernate/hibernate-native-sql-queries-examples/

而且也没有得到一个实用的方法。有人知道我怎么能做到这样的methos的实现:

public List<DadosUsuario> findByUsuario(Usuario user) { 

其中回报率将用户的数据(DadosUsuario)的列表?

UPDATE

最终代码:

@SuppressWarnings("unchecked") 
@Transactional 
public List<DadosUsuario> findByUsuario(Usuario user) { 
    Query query = sessionFactory.getCurrentSession().createSQLQuery(
      "select * from dados_usuario where fk_usuario = :id_usuario") 
      .addEntity(DadosUsuario.class) 
      .setParameter("id_usuario", user.getId()); 
      List<DadosUsuario> allUsers = query.list(); 
    return allUsers; 
} 

回答

1

为了能够返回某种对象的列表Hibernate查询应该是这样的:

public List<User> getAllUsers() { 
    Query q = currentSession().createQuery("from User"); 
    List<User> allUsers = (List<User>) q.list(); 
    return allUsers; 
} 

在哪里User是与要从中获取数据的表相匹配的hibernate类的名称,您将不得不更改fol降低以满足您的需求。

或者你可以有这样的:

public List<DadosUsuario> findByUsuario(Usuario user) { 
    Query q = currentSession().createQuery("from DadosUsuario d 
        where d.id = user.id"); 
    List<DadosUsuario> allUsers = (List<DadosUsuario>) q.list(); 
    return allUsers; 
} 

我希望这么多的线索就足够了。

+0

谢谢你的回答。我将你的解释与我在文章中引用的代码混合在一起,并得到我添加的问题。 –

+0

这就是学习如何:) –