簡體   English   中英

獲取作為 Hibernate 查詢結果的項目列表

[英]Get a list of items as result of a Hibernate query

我所有的 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 get 不接受類型 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;
}

為了能夠返回某種類型的對象列表,休眠查詢應該如下所示:

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

其中User是與您要從中獲取數據的表相匹配的休眠類的名稱,您必須更改以下內容以滿足您的需要。

或者你可以有類似的東西:

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

我希望這么多線索就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM