一张客户表,一张订单表. 一个客户可以有多个订单,一个订单只能有一个客户,订单与客户就是单向多对一的关系
@Entity
@Table(name="orders")
public class Order {
private Integer id;
private String ordername;
private Customer customer;
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrdername() {
return ordername;
}
public void setOrdername(String ordername) {
this.ordername = ordername;
}
//映射单向多对一的关联关系
//使用@ManyTOOne来映射多对一的关联关系
//使用@JoinColumn来映射外键
//使用@ManyToOne的fetch属性来修改默认的关联属性的加载策略
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="customer_id")
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
ManyToOne的CRUD
public class JPATest {
private EntityManager entityManager;
private EntityTransaction transaction;
private EntityManagerFactory entityManagerFactory;
@Before
public void setUp() throws Exception {
entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
entityManager = entityManagerFactory.createEntityManager();
transaction = entityManager.getTransaction();
transaction.begin();
}
@After
public void destroy() {
transaction.commit();
entityManager.close();
entityManagerFactory.close();
}
@Test
public void testManyToOneUpdate(){
Order order = entityManager.find(Order.class, 1);
order.getCustomer().setLastname("xiaoming");
}
//不能直接删除1的一端,因为有外键约束
@Test
public void testManyToOneRemove(){
// Order order = entityManager.find(Order.class, 2);
// entityManager.remove(order);
Customer customer = entityManager.find(Customer.class, 1);
entityManager.remove(customer);
}
//默认情况下使用左外连接的方式来获取n的一端的对象和其关联的1的一端的对象
//可使用@ManyToOne的fetch属性来修改默认的关联属性的加载策略
@Test
public void testManyToOneFind(){
Order order = entityManager.find(Order.class, 1);
System.out.println(order.getOrdername());
System.out.println(order.getCustomer().getLastname());
}
//保存多对一时,建议先保存1的一端,再保存n的一端,这样不会多出额外的update语句
@Test
public void testManyToOnePersist(){
Customer customer = new Customer();
customer.setAge(11);
customer.setBirthday(new Date());
customer.setCreattime(new Date());
customer.setEmail("jiang@163.com");
customer.setLastname("jiang");
Order o1=new Order();
o1.setOrdername("AAA");
Order o2=new Order();
o2.setOrdername("BBB");
//设置关联属性
o1.setCustomer(customer);
o2.setCustomer(customer);
//执行保存操作
entityManager.persist(customer);
entityManager.persist(o1);
entityManager.persist(o2);
}
}