JPA:单向多对一

一、单向多对一

     保存单向多对一时候,建议先保存一的一方,后保存n的一方,这样不会多出额外的update语句。

    默认情况下使用左外连接的方法是获取n的一端对象和其关联的1的一端对象,可以使用@ManyToOne的fetch属性来改变默认的关联加载策略。

    不能直接删除1的一方,因为有外键关联约束

   修改可以

 

总结:

外键是在建立在哪一方---》

首先,外键引用的那个列在主表中必须是主键列或者唯一列。

 所以1:n的肯定把外键建立在n的那张表上。

 1:1,一般要看谁是主表,谁是附属表,外键当然建立在附属表中。 

n:m的情况,需要建立一个关系表,

两个原表和其关系分别是1:n,1 :m

关系维护在多的一方,多的一方Order中设置Customer的属性,并且通过注解(使用@ManyToOne来映射多对一的关联关系
    //使用@JoinColumn来映射外键)。一的一方Customer不做任何处理。

       多的一方:

@Table(name="JPA_ORDER")
@Entity
public class Order {

    @Id
    @GeneratedValue
    private Integer id;
    @Column(name="ORDER_NAME")
    private String orderName;

    //使用@ManyToOne来映射多对一的关联关系
    //使用@JoinColumn来映射外键
    @JoinColumn(name="CUSTOMER_ID")
    @ManyToOne
    private Customer customer;

一的一方:

@Table(name="JPA_CUSTOMER")
@Entity
public class Customer {


    @Id
    @GeneratedValue
    private Integer id;
    @Column(name = "LAST_NAME")
    private String lastName;

    @Column(name="EMAIL")
    private String email;
    @Column(name="age")
    private Integer age;

    @DateTimeFormat
    @Column(name = "CREATE_TIME")
    private Date createTime;

    @DateTimeFormat
    @Column(name="BIRTH")
    private Date birth;

测试:增删改查

新增//
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreateTime(new Date());
cutomer.setLastName("AA");

Order order1 = new Order();
order1.setOrderName("O-FF-1");

Order order2 = new Order();
order2.setOrderName("O-FF-2");

设置关联关系
order1.setCustomer(customer);
order2.setCustomer(customer);
//执行保存操作
entityManager.persist(customer);
entityManager.persist(order1);
entityManager.persist(order2);

***************************************************
查询
Order order = entityManager.find(Order.class,2);
System.out.println(order.getOrderName());
System.out.println(order.getCustomer().getLastName());
**************************************************
更新
Order order = entityManager.find(Order.class,2);
order.getCustomer().setLastName("FFF");

*************************************************
删除
错误演示,不可以删除一的一方,因为有外键约束
Order order = entityManager.find(Order.class,1);
entityManager.remove(order);

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值