OneToMany 和ManyToOne
客户和联系人是一对多的关系,一的一方习惯称为主表,多的一方习惯称为从表
情况一:双方都配置 @JoinColumn(name = "lkm_cust_id",referencedColumnName ="cust_id")
客户表
@Entity
@Table(name="cst_customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="cust_id")
private Long custId;
@Column(name="cust_name")
private String custName;
@OneToMany(targetEntity = LinkMan.class)
//name从表外键的名称,虽然配置在主表,但最终体现在从表。referencedColumnName外键参照的主表的主键名
@JoinColumn(name = "lkm_cust_id",referencedColumnName ="cust_id")
// @OneToMany(mappedBy = "customer")
private Set<LinkMan> linkmans=new HashSet<LinkMan>(0);
联系人表
@Entity
@Table(name="cst_linkman")
public class LinkMan {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="lkm_id")
private Long lkmId;
@Column(name="lkm_name")
private String lkmName;
@ManyToOne(targetEntity = Customer.class)
@JoinColumn(name = "lkm_cust_id" ,referencedColumnName = "cust_id")
private Customer customer;
双方都进行保存操作
@Test
@Transactional
@Rollback(false)
public void test1(){
Customer customer=new Customer();
LinkMan linkMan1=new LinkMan();
LinkMan linkMan2=new LinkMan();
customer.setCustName("客户1");
linkMan1.setLkmName("联系1");
linkMan2.setLkmName("联系2");
linkMan1.setCustomer(customer);
linkMan2.setCustomer(customer);
customer.getLinkmans().add(linkMan1);
customer.getLinkmans().add(linkMan2);
customerDao.save(customer);
linkManDao.save(linkMan1);
linkManDao.save(linkMan2);
结果打印语句:
有2条更新语句
数据库
情况二:一的一方配置@OneToMany(mappedBy = "customer") 多的一方 @JoinColumn(name = "lkm_cust_id",referencedColumnName ="cust_id")。
mappedBy配置在一的一方