我所有的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;
}
答案 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;
}
我希望这么多线索就足够了。