zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    unity代码加密for Android,mono编译
    php __invoke 和 __autoload
    VC只运行一个程序实例
    VC单文档对话框添加托盘图标
    技术文档应该怎么写
    项目管理学习
    cannot download, /home/azhukov/go is a GOROOT, not a GOPATH
    Go语言学习
    appium键盘事件
    appium-doctor
  • 原文地址:https://www.cnblogs.com/zx-n/p/5181723.html
Copyright © 2011-2022 走看看