JPA(三)之实体关系一对多(多对一)

简介:  1.背景介绍:    对于购买商品时,订单信息(Order)和订单商品信息(OrderItem)的关系就是一对多的关系。   2.实体bean:   Order.java代码   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

1.背景介绍:

   对于购买商品时,订单信息(Order)和订单商品信息(OrderItem)的关系就是一对多的关系。

 

2.实体bean:

  Order.java代码

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.sinoi.bean;
 
import java.util.HashSet;
import java.util.Set;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
 
@Entity
@Table(name="my_order")
public class Order {
    @Id @Column(length=12)
    private String orderId;
    @Column(nullable=false)
    private Float amount = 0f;
    @OneToMany(cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
            mappedBy="order")
    private Set<OrderItem> orderItems = new HashSet<OrderItem>();
    public String getOrderId() {
        return orderId;
    }
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
    public Float getAmount() {
        return amount;
    }
    public void setAmount(Float amount) {
        this.amount = amount;
    }
     
    public Set<OrderItem> getOrderItems() {
        return orderItems;
    }
    public void setOrderItems(Set<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }
    public void addOrderItem(OrderItem orderItem) {
        orderItem.setOrder(this);//这句代码不加也可!
        this.orderItems.add(orderItem);
    }
     
     
}

OrderItem.java代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.sinoi.bean;
 
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
 
@Entity
public class OrderItem {
    @Id @GeneratedValue
    private Integer id;
    @Column(length=20, nullable=false)
    private String productName;
    @Column(nullable=false)
    private Float sellPrice;
    @ManyToOne(cascade={CascadeType.REFRESH, CascadeType.MERGE}, optional=false)
    @JoinColumn(name="item_order_for")
    private Order order;
    public Order getOrder() {
        return order;
    }
    public void setOrder(Order order) {
        this.order = order;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getProductName() {
        return productName;
    }
    public void setProductName(String productName) {
        this.productName = productName;
    }
    public Float getSellPrice() {
        return sellPrice;
    }
    public void setSellPrice(Float sellPrice) {
        this.sellPrice = sellPrice;
    }
}

 

3.测试代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package junit.test;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
import org.junit.Test;
 
import com.sinoi.bean.Order;
import com.sinoi.bean.OrderItem;
 
public class UnitTest {
    @Test
    public void save() {
        EntityManagerFactory entityManagerFactory = Persistence
                .createEntityManagerFactory("unitname");
        EntityManager entityManager = entityManagerFactory
                .createEntityManager();
        entityManager.getTransaction().begin();
         
        Order order = new Order();
        order.setOrderId("jfdkf323");
        order.setAmount(232f);
        OrderItem orderItem = new OrderItem();
        orderItem.setProductName("basketball");
        orderItem.setSellPrice(221f);
        OrderItem orderItem2 = new OrderItem();
        orderItem2.setProductName("football");
        orderItem2.setSellPrice(11f);
        orderItem.setOrder(order);
        orderItem2.setOrder(order);
        order.addOrderItem(orderItem);
        order.addOrderItem(orderItem2);
 
        entityManager.persist(order);
        entityManager.getTransaction().commit();
        entityManager.close();
        entityManagerFactory.close();
         
    }
}

 

 

4.配置文件persistence.xml和前面JPA(一)、、、一样,在此省略

目录
相关文章
|
搜索推荐 Linux Android开发
如何根据自己的开发板型号下载和配置交叉编译链
【8月更文挑战第24天】本指南详细介绍了为特定开发板下载及配置交叉编译链的过程。首先,需明确开发板型号与架构,通过查阅文档了解其处理器架构和支持的操作系统。其次,根据开发板架构及目标操作系统确定所需的交叉编译链类型。下载环节推荐三种途径:在线搜索、访问官方站点以及开源社区。安装阶段涉及解压文件并设置环境变量,以确保能在终端直接调用交叉编译工具。最后,通过检查版本信息及编译测试程序验证交叉编译链是否安装正确。整个过程中应注意选择合适的版本、遵循安装指导并妥善处理遇到的问题。
346 3
|
4月前
|
运维 监控 Ubuntu
新书速览|Ubuntu Linux运维从零开始学
本文摘自《Ubuntu Linux运维从零开始学》,获出版社和作者授权发布。
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
709 1
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
283 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220