• JPA中实现单向多对一的关联关系


    场景

    JPA入门简介与搭建HelloWorld(附代码下载):

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937

    在上面博客中搭建好JPA的HelloWorld后,只是对customer实体类完成数据库的映射。

    若要实现单向多对一的映射关系,怎样实现。

    注:

    博客主页:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    数据库中新建JPA_ORDER表

    其中一个用户可以有多个订单,但是一个订单只能属于一个用户,所以形成了单向多对一的关系。

    订单表中CUSTOMER_ID就是与用户表相关联的外键。

    在包下新建实体类Order

    package com.badao.jpa.helloworld;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    @Table(name="JPA_ORDERS")
    @Entity
    public class Order {
     private Integer id;
     private String orderName;
    
     private Customer customer;
    
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Id
     public Integer getId() {
      return id;
     }
    
     public void setId(Integer id) {
      this.id = id;
     }
    
     @Column(name="ORDER_NAME")
     public String getOrderName() {
      return orderName;
     }
    
     public void setOrderName(String orderName) {
      this.orderName = orderName;
     }
    
     //映射单向 n-1 的关联关系
     //使用 @ManyToOne 来映射多对一的关联关系
     //使用 @JoinColumn 来映射外键. 
     //可使用 @ManyToOne 的 fetch 属性来修改默认的关联属性的加载策略
     @JoinColumn(name="CUSTOMER_ID")
     @ManyToOne
     public Customer getCustomer() {
      return customer;
     }
    
     public void setCustomer(Customer customer) {
      this.customer = customer;
     }
    }

    主要是通过@ManyToOne来映射多对一的关联关系,使用@JoinColumn来映射主键。

    然后在配置文件persistence.xml中添加实体类Order的配置

    <class>com.badao.jpa.helloworld.Order</class>

    添加位置如下

    继续上面那篇博客的单元测试类。继续进行编写测试方法

    /**
       * 保存多对一时, 建议先保存 1 的一端, 后保存 n 的一端, 这样不会多出额外的 UPDATE 语句.
       */
      
      @Test
      public void testManyToOnePersist(){
       Customer customer = new Customer();
       customer.setAge(18);
       customer.setEmail("gg@163.com");
       customer.setLastName("GG");
       
       Order order1 = new Order();
       order1.setOrderName("G-GG-1");
       
       Order order2 = new Order();
       order2.setOrderName("G-GG-2");
       
       //设置关联关系
       order1.setCustomer(customer);
       order2.setCustomer(customer);
       
       //执行保存操作
       entityManager.persist(customer);
       entityManager.persist(order1);
       entityManager.persist(order2);
       
       
      }

    执行成功后查看数据库

    用户表

    订单表

  • 相关阅读:
    迭代模型
    螺旋模型
    瀑布模型
    V模型
    codeforces411div.2
    专题1:记忆化搜索/DAG问题/基础动态规划
    Python
    字符串的相关操作方法
    Python基本数据类型
    编码
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12030059.html
Copyright © 2020-2023  润新知