我是Hibernate的新手,我正在尝试返回这样的HQL查询:
select u.user, up.name from Usuario u
join u.usuarioPersonals as up
where u.idusuario=1
我在Dao中恢复了这个结果并在控制台上显示
List d = usuarioDao.test(1);
Iterator ite = d.iterator();
while ( ite.hasNext() ) {
Object[] row = (Object[]) ite.next();
System.out.print("\t\t"+row[0]);
System.out.print("\t"+row[1]);
System.out.println();
}
我的问题是没有其他选项来获取像Usuario.getUser()UsuarioPersonals.getName()这样的数据对象?
其他选项只写这样的hql语句:
from Usuario u
join u.usuarioPersonals as up
where u.idusuario=1
迭代我的数据
while ( ite.hasNext() ) {
Object[] row = (Object[]) ite.next();
Usuario usr = (Usuario) row[0];
UsuarioPersonals usr = (UsuarioPersonals) row[1];
System.out.print(usr.getUser());
System.out.print(usr.getName());
}
如果我想通过我的servlet发送到我的视图,那么最后一个选项可能很复杂。
对不起,我是这项技术的新手,我正在寻找其他选择但可能只存在这两个选项来发送数据。
谢谢!
答案 0 :(得分:1)
您通常不需要指定联接。
from Usuario u
where u.idusuario=1
这将只返回Usuario对象的列表,您可以遍历对象图以获取任何内容。
如果查看正在生成的SQL,您会看到UsuarioPersonals不存在。发生了什么事情是Hibernate在你尝试访问它们时会产生SQL。在一个小应用程序中,你不会有任何问题,但是如果你想要优化,并且你知道你将永远访问这些对象,你可以构建类似于你现在的方式的查询:
from Usuario u
join fetch u.usuarioPersonals as up
where u.idusuario=1
这会将UsuarioPersonals数据放在对象上,因此不需要额外的数据库调用。同样,可能没有必要,通常只需选择根对象。