liuhong2099 2009-08-05 12:17
浏览 260
已采纳

HQL查询是不是不能手动写多表吗?

[size=large]
我做了一个测试,
[code="java"]
String hql = "SELECT a.account,d.accountId FROM Account a ,Department d where a.id=d.accountId";
Query query = getSession().createQuery(hql);
List li = query.list();
for(int i=0;i<li.size();i++){

dao.Account account = (dao.Account)li.get(i);
System.out.println(account.getAccount());
}
[/code]
这段代码,HQL不能进行多表,打出来的结果和异常是Hibernate: select account0_.account as col_0_0_, department1_.account_Id as col_1_0_ from hibernate.account account0_, hibernate.department department1_ where account0_.id=department1_.account_Id
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to dao.Account
at main.TestMain.main(TestMain.java:34)

无法进行多表查询,只能通过 级联来查询!!!! 如果查询全部数据,那sql语句太多了,不管我怎么设置检索策略!

请问,我该怎么手动去写查询呢,这样写不行啊 郁闷 :oops: 最后一点分了啊,忘大家帮助啊 :D
[/size]
[b]问题补充:[/b]
您好,我查询的就是对象啊,不是在sql语言里的表名称
[b]问题补充:[/b]
那请问我这个该怎么改呢?
[b]问题补充:[/b]
哦,我明白了,它是返回的对象数组,你第一次已经改了

呵呵 :oops:
[b]问题补充:[/b]
怎么在封装到对象里去? 哥们, 按我这个 改个列子 我看下好吗? :oops:

  • 写回答

6条回答 默认 最新

  • wanglei1314520 2009-08-06 12:06
    关注

    public class Temp
    {
    private String account;
    private String accountId;
    // gets and sets ...
    }

    String hql = "SELECT a.account,d.accountId FROM Account a ,Department d where a.id=d.accountId";

    Query query = getSession().createQuery(hql);

    List li = query.list();

    List list_temp=new ArrayList();
    for(int i=0;i<li.size();i++)
    {
    Temp temp=new Temp();
    Object[] obj=(Object[])li.get(i);
    temp.setAccount(obj[0]);
    temp.setAccountId(obj[1]);
    list_temp.add(temp);
    }

    这样你的查询结果就封装到一个临时对象中了,并且把对象又放到了list中,
    类似于单表查询了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器