使用hql语句查询的对象集合没有返回该对象

public List findAll() {
String sql = "from Employee e left outer join e.department";
List list = (List) getSession().createQuery(sql).list();
return list;
}

System.out.println(employeeService.findAll());

打印结果:[[Ljava.lang.Object;@5183d589, [Ljava.lang.Object;@511d5d04]

toString方法重写了也没用。

4个回答

如:select A.name,B.name from A inner join B on A.id = B.id;
上面语句:查询A B两表 进行左关联,以A表为主,B表为附,也就是说,只要A表有记录,不管B表有没有都要查出来

感觉不对吧,应该循环遍历var employees = employeeService.findAll(); 你这样是打印了返回结果的数组地址,不是其中的内容

qq_23121031
zdog_ 回复serendipity_bloom: 对,我是这个意思的
2 年多之前 回复
qq_39771338
羊羊羊_bloom 你的意思是这样吗?
2 年多之前 回复
qq_39771338
羊羊羊_bloom List<Employee> employees = employeeService.findAll(); for (int i = 0; i < employees.size(); i++) { Employee employee = employees.get(i); System.out.println(employee); }
2 年多之前 回复

重写当然没有起到效果了。
createQuery()方法,应该还有一个重载方法,第二个参数是Class类的,你把你需要的类写在这里,就可以了。

qq_39771338
羊羊羊_bloom 并没有这个重载的方法呀。
2 年多之前 回复

我知道问题出在哪了,我本来想解决懒加载问题,然后使用左外连接,我没有加fetch关键字,导致查出来是Employee和Department的对象集合,并不是Employee的对象集合。
sql语句应该是这样的:String sql = "from Employee e left outer join fetch e.department";

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问