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);
   
   
  }

执行成功后查看数据库

用户表

订单表

原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/12030059.html