jpa的单项一对多,双向一对多

jpa的底层依然是Hibernate框架,所以他很多配置和hibernate很像

第一步:首先创建两个model分别为order和customer

创建order的model

package org.peter.model;

import javax.persistence.*;

/**
 * Created by Lenovo on 2017/7/27.
 */
@Entity(name = "t_order")
public class Order {
    private Long id;
    private String pname;
//    private Customer customer;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

//    @JoinColumn(name = "customer_id")//设置外键
//    @ManyToOne//设置多对一
//    public Customer getCustomer() {
//        return customer;
//    }
//
//    public void setCustomer(Customer customer) {
//        this.customer = customer;
//    }
}
创建customer的model

package org.peter.model;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

/**
 * Created by Lenovo on 2017/7/27.
 */
@Entity(name = "customer")
public class Customer {
    private Long id;
    private String cname;
    private String address;
    private Set<Order> orders = new HashSet<>();

    @OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.EAGER)//一对多,
    // fetch = FetchType.EAGER 这个是否开启延迟加载
    @JoinColumn(name = "customer_id")//添加主键
    public Set<Order> getOrders() {
        return orders;
    }

    public void setOrders(Set<Order> orders) {
        this.orders = orders;
    }
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
第二步:创建一个main的类做测试

package org.peter;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.peter.model.Customer;
import org.peter.model.Order;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.Set;

/**
 * Created by Lenovo on 2017/7/27.
 */
public class main {
    EntityManagerFactory factory;
    EntityManager manager;
    EntityTransaction tx;
    @Before
    public void before(){
        //1,创建EntityManagerFactory
         factory =  Persistence.createEntityManagerFactory("NewPersistenceUnit");
        //2,创建ManagerFactory
         manager = factory.createEntityManager();
        //3,开启事物
        tx = manager.getTransaction();
        tx.begin();
    }
    @After
    public void after(){
        //5,提交事物
        tx.commit();
        //6,关闭资源
        manager.close();
        factory.close();
    }
    @Test
    public void add1(){
        Order o1 = new Order();
        o1.setPname("蓝狐");
        Order o2 = new Order();
        o2.setPname("黄瓜");
        Order o3 = new Order();
        o3.setPname("吃饭");
        Customer customer = new Customer();
        customer.setAddress("深圳");
        customer.setCname("张艺三");
        customer.getOrders().add(o1);
        customer.getOrders().add(o2);
        customer.getOrders().add(o3);
        manager.persist(customer);
    }

    @Test
    //默认就开启了延迟加载
    public void select(){
        Customer customer = manager.find(Customer.class, 1l);
        Set<Order> orders = customer.getOrders();
        System.out.println(orders);
        System.out.println(customer);
    }

    @Test
     public void delete(){
         Customer customer = manager.find(Customer.class, 1l);
         manager.remove(customer);
     }
}

注意:我们在执行delete方法的时候一定要在customer的类配置

@OneToMany(cascade = {CascadeType.ALL}
不然就删除不掉和他相关另一张表里的数据


jpa双向的多对一就是即将order的model将注释的地方给打开就可以l

注意:两边设置的主键一定要一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值