@Test
public void testQueryProjection() {
Session session = HibernateUtils.openSession();
session.beginTransaction();
//操作
//hql:默认情况下返回的list的元素是Object[],Hibernate会自动根据返回的结果,来封装成不同的对象.投影都不会直接封装回实体对象。
List<Object[]> list = session.createQuery("select c.name, o.name from Customer c,Order o where c.id = o.customer.id and c.id = ?").setParameter(0, 1).list();
System.out.println(list);
for (Object[] objects : list) {
System.out.println("用户姓名:"+objects[0]+",用户订单名称:"+objects[1]);
}
// hql:默认情况下返回的list的元素是Object[],Hibernate会自动根据返回的结果,来封装成不同的对象.投影都不会直接封装回实体对象。
List<Object[]> list = session.createQuery("select o.name, o.customer.name from Order o inner join o.customer where o.customer.id = ?")
.setParameter(0, 1).list();
System.out.println(list.size());
for (Object[] objects : list) {
System.out.println("->:" + objects[0] + ",->:" + objects[1]);
}
//org.hibernate.QueryException illegal attempt to dereference collection
/*
List<Object[]> list = session.createQuery("select c.name, c.orders.name from Customer c inner join c.orders")
.setParameter(0, 1).list();
*/
List<Object[]> list = session.createQuery("select c.name, o.name from Customer c inner join c.orders o where c.id = ?")
.setParameter(0, 1)
.list();
System.out.println(list.size());
for (Object[] objects : list) {
System.out.println("->:" + objects[0] + ",->:" + objects[1]);
}
session.getTransaction().commit();
session.close();
}