Customer类
@Table(name="jpa_customer")
@Entity
public class Customer {
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Integer id;
@Column(name="last_name")
private String lastName;
private String email;
private int age;
// @JoinColumn(name="customer_id")//外键名
//若在1的一端的@oneToMany中使用mappedBy属性,则@OneToMany端就不能使用@JoinColum属性
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.REMOVE}, mappedBy = "customer")//映射一对多的关联关系,默认使用懒加载。cascade设置级联删除。
private Set<Order> orders = new HashSet<>();
//getter setter 省略
}
Order类
@Table(name = "jps_order")
@Entity
public class Order {
@GeneratedValue
@Id
private Integer id;
@Column(name = "order_name")
private String orderName;
@JoinColumn(name = "customer_id")
// 外键
@ManyToOne(fetch=FetchType.LAZY)//懒加载
// 映射多对一的关联关系
private Customer customer;
//getter setter
}
测试
//双向1-n,执行保存时,若先保存n,再保存1,默认情况下会多出4条update语句
//若先保存1,则会多出n条update语句
//建议在进行双向1-n关联关系时,使用n的一端来维护关联关系,而1的一端不维护关联关系,这样会有效减少SQL语句
//若在1的一端的@oneToMany中使用mappedBy属性,则@OneToMany端就不能使用@JoinColum属性
@Test
public void testOneToManyPersist2() {
Customer customer = new Customer();
customer.setAge(23);
customer.setEmail("umgsai@126.com");
customer.setLastName("shang");
Order order1 = new Order();
order1.setOrderName("订单1");
Order order2 = new Order();
order2.setOrderName("订单2");
customer.getOrders().add(order1);
customer.getOrders().add(order2);
order1.equals(customer);
order2.setCustomer(customer);
entityManager.persist(order1);
entityManager.persist(order2);
entityManager.persist(customer);
}
好复杂,还是MyBatis简单。。。
转载于:https://blog.51cto.com/shamrock/1707497