在hibernate上返回成员对象而不是Object [] row =(Object [])ite.next();

时间:2013-10-08 23:13:24

标签: hibernate

我是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发送到我的视图,那么最后一个选项可能很复杂。

对不起,我是这项技术的新手,我正在寻找其他选择但可能只存在这两个选项来发送数据。

谢谢!

1 个答案:

答案 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数据放在对象上,因此不需要额外的数据库调用。同样,可能没有必要,通常只需选择根对象。