首页 > 其他 > 详细

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

时间:2019-12-12 16:58:46      阅读:93      评论:0      收藏:0      [点我收藏+]

场景

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

 

执行成功后查看数据库

用户表

技术分享图片

技术分享图片

订单表

技术分享图片

 

 

技术分享图片

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!