hibernate一对多关联关系配置经验 (一)

2014-11-24 11:22:31 · 作者: · 浏览: 0

假使有一个order表和一个customer表,那么它们两者的关系是一个customer可以有多个order,一个order只能属于一个customer,在hibernate中,他们的配置如下:

Xml代码
< xml version="1.0" >
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">











name="orders"
inverse="true"
cascade="save-update"
>






Xml代码
< xml version="1.0" >
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">












name="customer"
column="CUSTOMER_ID"
class="mypack.Customer"
cascade="save-update"
/>



他们的业务类中则有以下方法:

Java代码
package mypack;

import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.util.*;

public class BusinessService{
public static SessionFactory sessionFactory;
private Long idOfTom;
private Long idOfTomOrder;
private Long idOfJack;
private Long idOfJackOrder;

static{
try{
Configuration config = new Configuration();
config.configure();
sessionFactory = config.buildSessionFactory();
}catch(RuntimeException e){e.printStackTrace();throw e;}
}

public void printOrdersOfCustomer(Long customerId){
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Customer customer=(Customer)session.get(Customer.class,customerId);
printOrders(customer.getOrders());
tx.commit();
}catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}

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

Customer customer=new Customer("Tom",new HashSet());
Order order=new Order();
order.setOrderNumber("Tom_Order001");

order.setCustomer(customer);
customer.getOrders().add(order);

session.save(customer);
tx.commit();
idOfTom=customer.getId();
idOfTomOrder=order.getId();

}catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}

public void associateCustomerAndOrder(){
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,idOfJack);
Order order=(Order)session.load(Order.class,idOfJackOrder);
order.setCustomer(customer);
customer.getOrders().add(order);
tx.commit();
}catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}

public void saveCustomerAndOrderSeparately(){
Session session = sessionFactory.openSess