双向的多对一(一对多)关联关系:
其实这种关联关系就是把单向的多对一和单向的一对多的关联关系的整合。
只是说明一点:
代码:
package qau.edu.ren; import java.util.Date; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class Test { public static void main(String[] args) {
// 创建configuration,加载配置文件;
Configuration con = new Configuration().configure();
// 创建Session;
Session session = con.buildSessionFactory().openSession();
// 开始事务 ;
Transaction tr = session.beginTransaction();
// 实例化对象;
Customer customer = new Customer();
customer.setName("AAAAAA");
Order o1 = new Order(); Order o2 = new Order();
o1.setName("aa"); o1.setDate(new Date());
o2.setName("bb"); o2.setDate(new Date());
o1.setCus(customer); o2.setCus(customer);
customer.getOrders().add(o2); customer.getOrders().add(o1); // // session.save(customer); session.save(o2); session.save(o1);
// //
// Customer cus = (Customer)session.get(Customer.class, 1); // // Set<Order> orders = cus.getOrders();
tr.commit();
session.close();
} } |
下面是Customer的关系映射文件:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="qau.edu.ren">
<class name="Customer" table="t_customer">
<id name="id" column="c_id"> <generator class="native"></generator> </id>
<property name="name" column="c_name"/>
<set name="orders" table="t_order" inverse="true"> <key column="c_id"/> <one-to-many class="Order"/> </set> </class> </hibernate-mapping>
|
上面的inverse属性用于控制反转,没有设置这个属性的时候,不管是怎样的save顺序,都会出现update,这是因为这是双向的关联关系,关联关系由双方记性维护。
inverse是<set>中的一个属性,当他的设置为true的时候,表示对方为主动方,表示关联关系由对方进行维护。