JPA单项多对一关联关系@ManyToOne
程序员文章站
2022-04-12 17:45:37
...
多对一关联关系
package com.jpa.helloworld;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Table(name="JPA_ORDER")
@Entity
public class Order {
private Integer oId;
private String oName;
private Customer customer;
@Id
@Column(name="JPA_ID")
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getoId() {
return oId;
}
public void setoId(Integer oId) {
this.oId = oId;
}
@Column(name="O_NAME")
public String getoName() {
return oName;
}
public void setoName(String oName) {
this.oName = oName;
}
//映射单向多对一关联关系
//使用@ManyToOne注解 映射多对一关联关系
//使用@JoinColumn 来映射外键
//这里的ManyToOne的fetch属性可以配置加载加载策略,有EAGER和LAZY
@JoinColumn(name="CUSTOMER_ID")
@ManyToOne(targetEntity=Customer.class,fetch=FetchType.EAGER)
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Override
public String toString() {
return "Order [oId=" + oId + ", oName=" + oName + ", customer=" + customer + "]";
}
}
@Test
public void testManyToOne() {
Customer customer = new Customer();
customer.setName("XXX");
customer.setBirth(new Date());
customer.setEmail("[email protected]");
customer.setCreateDate(DateTime.now());
customer.setLastUpdateDate(LocalDate.now());
Order order1 = new Order();
Order order2 = new Order();
order1.setoName("CC");
order2.setoName("DD");
order1.setCustomer(customer);
order2.setCustomer(customer);
em.persist(order2);
em.persist(order1);
em.persist(customer);
}
保存
建议在使用多对一关联关系保存对象时先保存一的一端
先保存一的一端:发送三条insert语句
先保存多的一端:发送三条insert语句和两条update语句
原因:当先保存多的一端时,多的一端的关联属性为null,当再保存一的一端时,会再次发送两条update语句来更新多的一端
性能上先保存一的一端要由于先保存多的一端
删除
删除时不能直接删除一的一端,可以删除多的一端
查询并修改一的一端的属性
Order order = em.find(Order.class, 4);
order.getCustomer().setAge(23);
推荐阅读
-
JPA中实现双向多对多的关联关系(附代码下载)
-
JPA中实现双向一对多的关联关系
-
JPA中实现双向一对一的关联关系
-
JPA中实现单向一对多的关联关系
-
JPA中映射关系详细说明(一对多,多对一,一对一、多对多)、@JoinColumn、mappedBy说明
-
两个表是多对多的关系,一定需要关联表吗?
-
Laravel5 的多对多关系中,在 blade 模板里面如何循环输出其中一张表的字段,而且输出其关联对应的另外一张表的字段
-
JPA中实现双向一对一的关联关系
-
JPA中实现双向多对多的关联关系(附代码下载)
-
Laravel5 的多对多关系中,在 blade 模板里面如何循环输出其中一张表的字段,而且输出其关联对应的另外一张表的字段