Customer类
@Table(name="jpa_customer")@Entitypublic 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 Setorders = new HashSet<>(); //getter setter 省略}
Order类
@Table(name = "jps_order")@Entitypublic 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简单。。。