获取Hibernate查询结果的项列表

时间:2014-03-25 23:41:58

标签: java 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;
    }
}

但不起作用(方法得到不接受Usuario类型作为第二个参数)。我也尝试使用SQL查询,遵循本文中的示例:

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

但也没有得到功能方法。有人知道如何实现这样的方法:

public List<DadosUsuario> findByUsuario(Usuario user) {

返回的是用户数据列表(DadosUsuario)?

更新

最终代码:

@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 个答案:

答案 0 :(得分:1)

为了能够返回某种对象列表,hibernate查询应如下所示:

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

其中User是与您要从中获取数据的表匹配的hibernate类的名称,您必须更改以下内容以满足您的需要。

或者您可以拥有类似的内容:

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;
}

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