Query query = session.createQuery("SELECT e.name, a.city FROM Employee e INNER JOIN e.address a WHERE a.state = 'CA'"); List<Object[]> result = query.list(); for (Object[] row : result) { String name = (String) row[0]; String city = (String) row[1]; System.out.println(name + " lives in " + city); }
在这个例子中,大家查询了Employee和Address表。查询结果包含两个字段:Employee表中的name和Address表中的city。大家使用INNER JOIN关键字在Employee和Address表之间建立了连接,使用条件“a.state = ‘CA’”过滤了结果。最后,大家通过List对象遍历结果,并从每行中提取字段值。
如果想要使用LEFT OUTER JOIN,只需要将INNER JOIN替换为LEFT OUTER JOIN即可:
Query query = session.createQuery("SELECT c.name, o.orderNumber FROM Customer c LEFT OUTER JOIN c.orders o WHERE o.totalAmount >1000"); List<Object[]> result = query.list(); for (Object[] row : result) { String name = (String) row[0]; String orderNumber = (String) row[1]; System.out.println(name + "'s order " + orderNumber + " has a total amount >1000"); }
在这个例子中,大家查询了Customer和Order表。查询结果包含两个字段:Customer表中的name和Order表中的orderNumber。大家使用LEFT OUTER JOIN关键字连接了两个表,使用条件“o.totalAmount >1000”过滤了结果。最后,大家通过List对象遍历结果,并从每行中提取字段值。
使用HQL进行两个表之间的关联查询非常方便。大家只需要使用JOIN关键字连接两个表,并使用条件来过滤结果即可。同时,大家还可以使用INNER JOIN,LEFT OUTER JOIN和CROSS JOIN等不同类型的JOIN来满足不同的查询需求。