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

返回hibernate上的成员对象,而不是对象[]行=(对象[])ite.next();,hibernate,Hibernate,我是新加入Hibernate的,我尝试像这样返回HQL查询: select u.user, up.name from Usuario u join u.usuarioPersonals as up where u.idusuario=1 from Usuario u join u.usuarioPersonals as up where u.idusuario=1 在我恢复Dao中的结果集并在控制台上显示之后 List d = u

我是新加入Hibernate的,我尝试像这样返回HQL查询:

    select u.user, up.name from Usuario  u
    join u.usuarioPersonals as up
    where u.idusuario=1
    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语句,如下所示:

    select u.user, up.name from Usuario  u
    join u.usuarioPersonals as up
    where u.idusuario=1
    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发送到视图,最后一个选项可能比较复杂

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


谢谢

通常不需要指定联接

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

Usuario和UsuarioPersonals之间的关系是什么?在两个实体之间建立关系,您可以遍历对象并找到您想要的值。我的关系运行良好,因为如果我打印Dao对象,是否显示结果。如果使用servlet和jsp,最好的选择可能是在POJO接口上映射,用DAO结果对象填充POJO接口对象并发送到视图,我不知道这是否是一个好的实践Hanks David!如果我想优化我的应用程序,我可以使用根对象,你能建议不要将行对象发送到我的视图吗?我可以在其中映射我的接口(如struts)并用根对象填充该对象吗?使用此选项,我可以通过我的对象属性进行访问,例如usr.getName()、usr.getUser()。是的,如果只选择一个持久实体,则可以在视图中使用这些实体。如果在渲染视图之前关闭会话,您将无法延迟加载任何内容,因此您需要通过执行连接获取来急切地加载。尝试的一个好方法是在hibernate配置中打开show_sql,这样您就可以看到生成的所有sql,并知道优化是否有效。