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:

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中,
类似于单表查询了

hibernate 的多表查询返回的list中存放的不是po,而是Object[]
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++)
{
Object[] obj=(Object[])li.get(i);
System.out.println(obj[0]+" "+obj[1]);
}

我知道你查的是对象,当从一个表中查的时候hibernate返回的list中存的是一个个持久化类的对象,
当从多个表中查的时候,返回的list中存的是一个个的Object数组,每个数组存放一条记录,由于记录是从多个表中查出来的,因此没有对象与其对应,就由数组代替了

用hibernate做多表查询跟jdbc差不多了,你把我那段代码运行一下就明白了

就按我写的那段代码啊,你要是必须要把查询结果封到对象里去的话,那就再写一个类,实例域包含你查询结果的所有字段,我都是这么干的,hibernate的多表查询体现不出简单来

不是不能,你是的对象转型时出错了
[color=red]dao.Account account = (dao.Account)li.get(i); [/color]
你的查询语句的返回结果是Object[], a.account = object[0], d.accountId = object[1];

如果你想查询出来的是dao.Account
请将hql改为String hql = "SELECT a FROM Account a ,Department d where a.id=d.accountId";