[英]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.