0

我是 Hibernate 的新手,我正在尝试像这样返回 HQL 查询:

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

在我的道中恢复这个结果并在控制台上显示之后

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

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

谢谢!

4

1 回答 1

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

于 2013-10-10T06:53:08.043 回答