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
注意:两边设置的主键一定要一样