JPA3--双向与级联操作

本文详细介绍了JPA3中的双向一对多、双向多对一、单向多对多和双向多对多的关系配置及保存操作,特别强调了级联操作和效率优化。建议使用单向关系以提高效率,并提供了关于中间表和一对一关系的处理建议。
摘要由CSDN通过智能技术生成

JPA3–双向与级联操作

一 、单向一对多

1.1配置

在一方配置onetomany

@Entity
@Table(name="t_productDir")
public class ProductDir {
   
    @Id
    @GeneratedValue
    private Long id;
    private String name;

    //配置多方 List/Set
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name="dir_id")
    @OrderBy("price desc")
    private List<Product> products = new ArrayList<>();

多方配置:

@Entity
@Table(name="t_product")
public class Product {
   
    @Id
    @GeneratedValue
    private Long id;
    private String name;
1.2保存操作:

不管是先保存一方还是多方,都有额外发送sql ,效率上面比较低,建议使用单向多对一,如果要学习双向 这个也要学习

1.3在使用集合的时候,使用接口 比如List/Set(掌握)

List主要有顺序上面 比如组合就可以使用
Set主要多对多 多对一上面 没有顺序 但是orderby 也可以排序

二、双向多对一或者一对多

2.1配置:
@Entity
public class ProductDir {
   
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @OneToMany(mappedBy=”dir”)
  // @JoinColumn(name="dir_id")
  private Set<Product> products = new HashSet<Product>();
  
@Entity
public class Product {
   
  @Id
  @GeneratedValue
  private Long id;
  private String name;
  @ManyToOne(fetch = FetchType.LAZY) // 实现延迟加载
  @JoinColumn(name = "dir_id")
  private ProductDir dir;
}
2.2保存代码案例:
public void testManytoOne2() throws Exception{
   
    //保存数据
    Product  product1= new Product();
    product1.setName("华硕飞行堡垒");

    Product product2 = new Product();
    product2.setName("联想拯救者");

    ProductDir dir = new ProductDir();
    dir.setName("笔记本电脑");

    //设置关系
    dir.getProducts().add(product1);
    dir.getProducts().add(product2);

    product1.setDir(dir);
    product2.setDir(dir);

    //保存
    EntityManager entityManager = JpaUtils.getEntityManager();
    entityManager.getTransaction().begin();

    //双向的
    entityManager.persist(dir);
    entityManager.persist(product1);
    entityManager.persist(product2);
    
    entityManager.getTransaction().commit();
    entityManager.close();
2.3级联操作
配置:
级联保存((mappedBy = "dir" 表示将外键的维护交给多方管理,dir表示多方中字段属性名,,cascade = CascadeType.PERSISIT 表示可以使用级联保存,除了PERSISIT,常用的还有ALL ,remove)
@OneToMany(mapp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值