JPA:单向一对多

单向一对多:

 

   单向1-n关联关系保存时候一定会多出update语句,因为n的一段插入时候不会同时插入外键列。

  默认对关联的多的一方使用懒加载策略,可以使用@OneToMany的fetch属性改变默认的加载策略。

  默认情况,若删除1的一段,则会先将关联的n的一方的外键置未空,然后执行删除,可以通过@OneToMany的cascade属性设置级联删除。cascade={cAScadeType.REMOVE}

 

  修改可以

 

    多的一方:

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

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

    

   一的一方

@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;

    //映射单向1-n关联关系
    //使用@OneToMany来映射关联关系,@JoinComunm映射外键列的名称
    @JoinColumn(name="CUSTOMER_ID")
    @OneToMany
    private Set<Order> orders;
新增:
单向1对多关联关系保存一定会多出update语句,因为多的一方插入数据不会同时插入外键列
Customer customer = new Customer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setLastName("ZZ");

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

Order order2 = new Order();
order2.setOrderName(""O-ZZ-2);
   建立关联关系
customer.getOrders().add(order1);
customer.getOrders().add(order2);
    保存
entityMagager.persist(order1);
entityMagager.persist(order2);

entityMagager.persist(consumer);


*************************************************
查询
默认使用懒加载加载多的一方策略
Customer customer = entityMagager.find(Customer.class,1);
System.out.println(customer.getLastName());
System.out.println(customer.getOrders().size());
**************************************************
修改
Customer customer = entityMagager.find(Customer.class,1);

customer.getOrders().iterator().next().setOrderName("OOOOOOOOO");

***************************************************
删除
默认情况若删除一的一方,会把关联的多的一端外键置空,然后删除一的。
可以使用@OneToMany的cascade属性来修改默认的删除策略。

若删除多的一方可以直接删除,因为外键在多的一方。
Customer customer = entityMagager.find(Customer.class,1);

entityManager.remove(customer);

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值