hibernate - 在hibernate中返回成员对象,而不是对象 [] 行= ( 对象 [] ) ite.next() ;

  显示原文与译文双语对照的内容
138 5

 select u.user, up.name from Usuario u
 join u.usuarioPersonals as up
 where u.idusuario=1

在我恢复这个resulset之后,在我的Dao中


 List d = usuarioDao.test(1);

 Iterator ite = d.iterator();

 while ( ite.hasNext() ) {
 Object[] row = (Object[]) ite.next();
 System.out.print("tt"+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发送到视图,最后一个选项可能比较复杂。

谢谢!

时间: 原作者:

93 5

你通常不需要指定联接。


 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数据,这样它就不需要额外的数据库调用。 同样,可能没有必要,你通常只选择 root 对象。

...