一、简单演示
/**
* 查询的客户,客户和联系人有关系 select * from cst_customer c, cst_linkman l where c.id =
* l.id
*/
@Test
public void run1() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
// 内连接的写法
Query query = session.createQuery(" from Customer c inner join c.linkmans ");
// 默认的返回值是数组
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
tx.commit();
}
二、封装到对象中
/**
* 数据默认返回的是数组,把数据封装到对象中
* 提供关键字:fetch 迫切连接。使用fetch关键字,把数据封装到对象中
*/
@Test
public void run2() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
// 内连接的写法
Query query = session.createQuery(" from Customer c inner join fetch c.linkmans ");
// 默认的返回值是数组
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
tx.commit();
}
三、解决数据重复
/**
* 数据的重复问题
*/
@Test
public void run3() {
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
// 内连接的写法
Query query = session.createQuery(" from Customer c inner join fetch c.linkmans ");
// 默认的返回值是数组
List<Customer> list = query.list();
// 手动解决,编程中都使用这种方式解决数据重复问题
Set<Customer> set = new HashSet<Customer>(list);
for (Customer customer : set) {
System.out.println(customer);
}
tx.commit();
}