hibernate双向一对多映射

 双向多对一 :Customer类------------》一的一端   Order类-----------》多的一端

Customer类:(省略set()、get()和构造方法)

1   private Integer customerId;
2     private String customerName;
3     
4     private Set<Order> order = new HashSet<>();

Order类:(省略set()、get()和构造方法)

 1 private Integer orderId;

2 private String orderName;

3 private Customer customer; 

 

Customer类的映射文件:

 1 <!-- 映射类和数据表 -->
 2     <class name="Customer" table="CUSTOMERS">
 3         <!-- 映射OID和数据表的主键 -->
 4         <id name="customerId" type="java.lang.Integer">
 5             <column name="CUSTOMER_ID"/>
 6             <!-- 指定主键的生成方式 -->
 7             <generator class="native"/>
 8         </id>
 9         
10         <!-- 映射属性和字段 -->
11         <property name="customerName" type="java.lang.String">
12             <column name="CUSTOMER_NAME"/>
13         </property>
14         
15         <!-- 映射 1对多的那个集合属性-->
16         <!-- set:映射set类型的属性,table:set中的元素对应的记录放在哪一个数据表中.该值需要和多对一的多的那个表的名字一致 -->
17         <!-- inverse:指定由哪一方来维护关联关系,通常设置为true,以指定由多的一端来维护关联关系 -->
18         <!-- cascade:设定级联操作.值为delete时删除一的这端时会把多的那端的对应记录也删除.delete-orphan解除关系(删除孤儿).save-update级联保存
19              开发时不建议设定该属性.建议使用手工的方式来处理 -->
20         <!-- order-by:在查询时对集合中的元素进行排序,order-by中使用的是表的字段名,而不是持久化类的属性名 -->
21         
      <set name="order" table="ORDERS" inverse="true" order-by="ORDER_NAME DESC"><!-- 对应那个表inverse反转,放弃维护关联关系 --> 22 <!-- 指定多的表中的外键列的名字 --> 23 <key column="CUSTOMER_ID"></key><!-- 外键名 --> 24 <one-to-many class="Order"/><!-- 指定映射的类型 --> 25 </set>

Order类的映射文件:

 1 <class name="Order" table="ORDERS">
 2         <id name="orderId" type="java.lang.Integer">
 3             <column name="ORDER_ID" />
 4             <generator class="native" />
 5         </id>
 6        
 7         <property name="orderName" type="java.lang.String">
 8             <column name="ORDER_NAME" />
 9         </property>
10         
11         <many-to-one name="customer" class="com.nzx.hibernate2.n21.both.Customer" column="CUSTOMER_ID">
12             
13         </many-to-one>
14         

junit类:

 1 package com.nzx.hibernate2.n21.both;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import org.hibernate.LazyInitializationException;
 6 import org.hibernate.Session;
 7 import org.hibernate.SessionFactory;
 8 import org.hibernate.Transaction;
 9 import org.hibernate.cfg.Configuration;
10 import org.hibernate.service.ServiceRegistry;
11 import org.hibernate.service.ServiceRegistryBuilder;
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Test;
15 
16 public class HibernateTest {
17 
18     
19 
20     private SessionFactory sessionFactory;
21     private Session session;
22     private Transaction transaction;
23 
24     @Before
25     public void init() {
26 
27         // 读取hibernate.cfg.xml文件
28         Configuration cfg = new Configuration().configure();
29 
30         ServiceRegistry serviceRigestry = new ServiceRegistryBuilder()
31                 .applySettings(cfg.getProperties()).buildServiceRegistry();
32 
33         sessionFactory = cfg.buildSessionFactory(serviceRigestry);
34 
35         session = sessionFactory.openSession();
36         transaction = session.beginTransaction();
37     }
38 
39     @After
40     public void destroy() {
41 
42         // 关闭session、sessionFactory
43 
44         transaction.commit();
45         session.close();
46         sessionFactory.close();
47     }
48     
49     @Test
50     public void testMany2One(){
51         Customer customer = new Customer();
52         customer.setCustomerName("BB");
53         
54         Order order1 = new Order();
55         order1.setOrderName("ORDER_9");
56         
57         Order order2 = new Order();
58         order2.setOrderName("ORDER_7");
59         
60         
61         //设定关联关系
62         order1.setCustomer(customer);
63         order2.setCustomer(customer);
64         
65         customer.getOrder().add(order1);
66         customer.getOrder().add(order2);
67         
68         /*
69          * 先插入一的一端
70          */
71         session.save(customer);
72         session.save(order1);
73         session.save(order2);
74         
75         /*
76          * 先插入多的一端
77          * 
78          */
79 //        session.save(order1);
80 //        session.save(order2);
81 //        session.save(customer);
82     }
83     
84     
85 
86 }

 

posted @ 2016-02-04 15:30  在路上的牛小牛  阅读(236)  评论(0编辑  收藏  举报