【问题标题】:how to parse results of joint query in hibernate如何在hibernate中解析联合查询的结果
【发布时间】:2013-08-26 22:34:20
【问题描述】:

在我的项目中,我有 2 个 bean(Demande 和 Candidat),我想像这样使用 Hibernate 执行连接查询:

String squery="select d.date_demande, c.nom, c.prénom from Demande d , Candidat c where d.id_candidat=c.id_candidat";
SQLQuery query=session.createSQLQuery(squery);

问题是我不知道这个查询返回哪个对象。我想把这个查询的结果放在一个列表中,这样我就可以很容易地在 jsp 文件中使用它。

【问题讨论】:

    标签: java hibernate list object join


    【解决方案1】:
    String squery="select date_demande as {d.date_demande},nom as {c.nom}, prénom as {c.prénom} from Demande d , Candidat c   
                    where d.id_candidat=c.id_candidat";
    SQLQuery query=session.createSQLQuery(squery);
    query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
    Map<String,Object> row = null;
    List data = query.list();
    for (Object object : data) {
         row= (Map<String,Object>)object;
         System.out.println("date_demande: " + row.get("date_demande"));
         System.out.println("nom: " + row.get("nom"));
         System.out.println("prénom: " + row.get("prénom"));
    }
    

    请确保 List data = query.list();返回结果。

    更新

    迭代地图并查看值和键并以此为基础工作。

    for (Object object : data) {
    
          Map row = (Map) object;
          Iterator entries = row.entrySet().iterator();
          while (entries.hasNext()) {
               Map.Entry entry = (Map.Entry) entries.next();
               System.out.println("Key = " + key + ", Value = " + entry.getValue());
         }
     }
    

       for (Object object : data) {
    
          Map row = (Map) object;
          System.out.print(row.get("0"));
          System.out.print("\t" + row.get("1"));
          System.out.print("\t" + row.get("2"));
    
       }
    

    在你的 servlet/struts/spring 控制器中写这个

      request.setAttribute("list", data);  
    

    把这个写在你的jsp中

     <c:forEach items="${list}" var="map">
           <c:forEach items="${map}" var="entry">
                  ${entry.key}<br>
                  ${entry.value}<br>
           </c:forEach>
     </c:forEach>
    

    【讨论】:

    • 它返回空值,并且我数据库中的表不是空的,即使是像“从需求中选择 date_demande”这样的简单查询,它也会给我空值..谢谢你的回答顺便说一句!
    • 是的,它正在返回结果(data.size() =16),这意味着它获取值但结果仍然为 null,我猜问题出在 row.get("...." )
    • 请问我怎样才能让这个列表显示在带有 jstl 代码的表格中?我应该返回数据列表吗?
    • 你能在这里发布输出吗? System.out.println("Key = " + key + ", Value = " + entry.getValue());
    【解决方案2】:

    我现在不记得了,但我觉得应该是这样的:

    "select d.date_demande, c.nom, c.prenom from Demande as d inner join Candidat as c"

    如果您已正确定义模型(pk 的附加注释和关系),它会通过 id 自动加入。

    在 hql 中有一些关于 join 的内容 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins

    如果我帮助了你,请投票 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2022-08-09
      • 2019-12-06
      • 1970-01-01
      • 2012-09-23
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多