⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onetomanytest.java

📁 Hibernate的精典实例
💻 JAVA
字号:
package hibernate.demo.onetomany;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;

public class OneToManyTest {
	public static SessionFactory sessionFactory;
	static {
		try {

			Configuration config = new Configuration();
			config.addClass(Hi_Customer.class).addClass(Hi_Order.class);

			sessionFactory = config.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// left join fetch
	public Hi_Customer findCustomer(int customer_id) throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			List lst = session
					.find("select c from Hi_Customer c left outer join c.orders");
			tx.commit();
			return null;
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			throw e;
		} finally {

			session.close();
		}
	}

	// 检索order对象
	public Hi_Order findOrder(int order_id) throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			System.out.println("findCustomer====");
			Hi_Order order = (Hi_Order) session.load(Hi_Order.class,
					new Integer(order_id));

			tx.commit();
			return order;
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			throw e;
		} finally {

			session.close();
		}
	}

	public void saveCustomerAndOrderWithCascade() throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {

			tx = session.beginTransaction();

			Hi_Customer customer = new Hi_Customer("Tom", new HashSet());
			Hi_Order order1 = new Hi_Order();
			Hi_Order order2 = new Hi_Order();

			System.out.println("saveCustomerAndOrderWithCascade====");

			order1.setOrderNumber("Tom_Order001");
			order2.setOrderNumber("tom_Order002");

			order1.setCustomer(customer);
			order2.setCustomer(customer);
			customer.getOrders().add(order1);
			customer.getOrders().add(order2);

			session.save(customer);
			tx.commit();
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			e.printStackTrace();
		} finally {

			session.close();
		}
	}

	// 建立父子关系
	public void associateCustomerAndOrder() throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {

			tx = session.beginTransaction();
			System.out.println("associateCustomerAndOrder===");
			Hi_Customer customer = (Hi_Customer) session.load(
					Hi_Customer.class, new Integer(2));
			System.out.println("name :" + customer.getName());

			Hi_Order order = (Hi_Order) session.load(Hi_Order.class,
					new Integer(3));

			// 建立关联关系(many 端 inverse:true提高性能)
			order.setCustomer(customer);
			customer.getOrders().add(order);
			tx.commit();

		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			e.printStackTrace();
		} finally {

			session.close();
		}
	}

	// 单独保存
	public void saveCustomerAndOrderSeparately() throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {

			tx = session.beginTransaction();
			System.out.println("saveCustomerAndOrderSeparately====");
			Hi_Customer customer = new Hi_Customer();
			customer.setName("Jack");

			Hi_Order order = new Hi_Order();
			order.setOrderNumber("Jack_Order001");

			session.save(customer);
			// 关联字段为空
			session.save(order);

			tx.commit();

		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			e.printStackTrace();
		} finally {

			session.close();
		}
	}

	// 级联删除
	public void deleteCustomer() throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			System.out.println("deleteCustomer====");
			// 级联查找
			Hi_Customer customer = (Hi_Customer) session.load(
					Hi_Customer.class, new Integer(3));
			// 级联删除
			session.delete(customer);

			tx.commit();

		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			session.close();
		}
	}

	// 解除父子关系(all-delete-orphan)
	public void removeOrderFromCustomer() throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			System.out.println("removeOrderFromCustomer====");
			Hi_Customer Hi_Customer = (Hi_Customer) session.load(
					Hi_Customer.class, new Integer(2));
			Hi_Order Hi_Order = (Hi_Order) Hi_Customer.getOrders().iterator()
					.next();
			// 解除父子关系
			Hi_Customer.getOrders().remove(Hi_Order);
			Hi_Order.setCustomer(null);

			tx.commit();

		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			session.close();
		}
	}

	public void printOrders(Set orders) {
		for (Iterator it = orders.iterator(); it.hasNext();) {
			Hi_Order Hi_Order = (Hi_Order) it.next();
			System.out.println("OrderNumber of "
					+ Hi_Order.getCustomer().getName() + " :"
					+ Hi_Order.getOrderNumber());
		}
	}

	public void saveCustomerAndOrderWithInverse() throws Exception {
		saveCustomerAndOrderSeparately();
		associateCustomerAndOrder();
	}

	// 立即检索

	public Hi_Customer findCustomers(String name) throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			List lstCustomer = session.find("from Hi_Customer c where c.name='"
					+ name + "'");
			Hi_Customer cus = (Hi_Customer) lstCustomer.get(0);
			cus.getOrders().iterator();
			tx.commit();
			return null;
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			throw e;
		} finally {

			session.close();
		}
	}

	// 左外连接
	public Hi_Customer findCustomerOuterJoin(Integer id) throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			session.load(Hi_Customer.class, id);
			tx.commit();
			return null;
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			throw e;
		} finally {

			session.close();
		}
	}
	//many-to-one(立即)
	public Hi_Customer findOrderImmediat(Integer id) throws Exception {

		Session session = sessionFactory.openSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			session.load(Hi_Order.class, id);
			tx.commit();
			return null;
		} catch (Exception e) {
			if (tx != null) {

				tx.rollback();
			}
			throw e;
		} finally {

			session.close();
		}
	}
	public void test() throws Exception {
//		 saveCustomerAndOrderWithCascade();
//		 saveCustomerAndOrderSeparately();
//		 associateCustomerAndOrder();
//		 deleteCustomer();
//		 removeOrderFromCustomer();
//		 检索策略
//		 1立即检索
//		 findCustomer(2);
//		 多对一关联检索策略
//		 findOrder(7);
//		 批量立即检索
//		findCustomers("Tom");
//		outer-join
//		findCustomerOuterJoin(new Integer(1));
//		findCustomer(2);
//		findOrderImmediat(new Integer(1));
	}

	public static void main(String[] args) throws Exception {
		new OneToManyTest().test();
		sessionFactory.close();
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -