📄 onetomanytest.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 + -