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

Wesley13
• 阅读 341

1.背景介绍:

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

2.实体bean:

  Order.java代码

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代码

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.测试代码

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(一)、、、一样,在此省略

点赞
收藏
评论区
推荐文章
Stella981 Stella981
2年前
Go 语言编程 — gorm 的数据完整性约束
目录文章目录目录实体完整性(主键约束)用户定义完整性(非空约束、唯一约束、检查约束和默认值)参照完整性(外键约束)关联关系一对一、一对多关联多对多关联示例实体完整性(主键约束)每个关系(表)至少存在一个主
Stella981 Stella981
2年前
Django之ORM(多对多)
一、ManyToManyField1、classRelatedManager"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:1.外键关系的反向查询2.多对多关联关系简单来说就是当 点后面的对象 可能存在多个的时
Wesley13 Wesley13
2年前
Java中list集合的clean()方法滥用引发的bug
做的是电商系统,主系统生成订单后,分别加入到不同的队列中给另外的三个子系统来异步处理,订单和商品是一对多的关系,在实际测试中,发现其中有一个子系统从队列中获取到的订单实体中,商品列表一直为空,子系统的开发人员一直说是获取不到值导致。因为这个问题,测试一直没通过,不得已只能打日志,反复排查。最后发现在这个子系统中,从队列拿到订单实体后,商品列表是不为空的,但是
Stella981 Stella981
2年前
Django中模型层中ORM的多表操作
ORM的多表创建(一对一.一对多,多对多):1模型创建  实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(onetoone)出版商模型:出版
Wesley13 Wesley13
2年前
UML画图笔记
1\.类图:             描述类图的关系,                 a)泛化(一般用于继承)表示:空心箭头实线              b)实现(实现接口)表示:空心箭头虚线              c)聚合(一对多的关系)带空心菱形箭头实线              d)组合(a由b组成)
Wesley13 Wesley13
2年前
JPA
JPA中,一对多关系使用@OneToMany标示关系维护端:1packagecom.yl.demo1.bean.oneTomany;23importjavax.persistence.CascadeType;4importjavax.persistence.Column;5im
Stella981 Stella981
2年前
Hibernate利用关联关系操纵对象
Hibernate利用关联关系操纵对象数据对象之间关联关系有一对一、一对多及多对多关联关系。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。本节讲解如何在Hibernate中处理这些对象之间的关联关系。本节使用到4个类,它们分别是Student(学生)、Card(学生证)、Group(班级)和Cou
Wesley13 Wesley13
2年前
@OneToMany、@ManyToOne以及@ManyToMany讲解(五)
一、一对多(@OneToMany)1、单向一对多模型假设通过一个客户实体可以获得多个地址信息。对于一对多的实体关系而言,表结构有两种设计策略,分别是外键关联和表关联。(1)映射策略外键关联在数据库中表customer和表结构address定义,如下:createtablecustomer(
Stella981 Stella981
2年前
Django框架(七):模型(三) 关联、模型类的属性
1\.关联1.1模型类关系关系型数据库的关系包括三种类型:ForeignKey:一对多,将字段定义在多的一端中。ManyToManyField:多对多,将字段定义在任意一端中。OneToOneField:一对一,将字段定义在任意一端中。1.1.1一对多关系
Stella981 Stella981
2年前
Hibernate 单向的一对多关联映射
单向的一对多关联关系(OnetoMany)对象模型关系分析:少的一端:会通过引用一个多端的集合对象,建立对象模型关系多的一端:没有任何变化,不知道和少的一端存在着关系。关系模型分析:少的一端:没有任何变化多的一端:会和少的一端建立外键关系使用时需要少的一端所对应的XXX.hbm.xml中进行配置<bagname"对多的