1

在我的项目中,我有 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 文件中使用它。

4

2 回答 2

2
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>
于 2013-08-26T23:45:05.973 回答
0

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

“从 Demande 中选择 d.date_demande、c.nom、c.prenom 作为 d 内部加入候选人作为 c”

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

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

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

于 2013-08-26T23:22:58.053 回答