1. 程式人生 > >Hibernate的Hql多表操作

Hibernate的Hql多表操作

專案中Hiberinated的多表操作語法比較詭異,一般不建議使用
內連結

	@Test
	//Hql的多表查詢
	//內連結將兩方的資料放入陣列中
	public void test(){
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		//linkmans為Customeri物件中的Set集合的名稱
		String hql = "from Customer c inner join c.linkmans";
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		for (Object[] objects : list) {
			System.out.println(Arrays.toString(objects));
		}
		tx.commit();
		session.close();
	}

迫切內連結
將linkmans集合裝到Customer物件中

//迫切內連結
	//將linkmans集合裝到Customer物件中
		@Test
		public void test2(){
			Session session = HibernateUtils.openSession();
			Transaction tx = session.beginTransaction();
			//linkmans為Customeri物件中的Set集合的名稱
			String hql = "from Customer c inner join fetch c.linkmans ";
			Query query = session.createQuery(hql);
			List<Customer> list = query.list();
			System.out.println(list);
			tx.commit();
			session.close();
		}

左外連結


		@Test
		//左外連結 兩方的資料放入陣列中
		public void test3(){
			Session session = HibernateUtils.openSession();
			Transaction tx = session.beginTransaction();
			//linkmans為Customeri物件中的Set集合的名稱
			String hql = "from Customer c left join c.linkmans ";
			Query query = session.createQuery(hql);
			List<Object[]> list = query.list();
			for (Object[] objects : list) {
				System.out.println(Arrays.toString(objects));
			}
				
			tx.commit();
			session.close();
		}

右外連線

		@Test
		//右外連結兩方的資料放入陣列中
		public void test4(){
			Session session = HibernateUtils.openSession();
			Transaction tx = session.beginTransaction();
			//linkmans為Customeri物件中的Set集合的名稱
			String hql = "from Customer c right join c.linkmans ";
			Query query = session.createQuery(hql);
			List<Object[]> list = query.list();
			for (Object[] objects : list) {
				System.out.println(Arrays.toString(objects));
			}
				
			tx.commit();
			session.close();
		}