Spring Data JPA (2) 一对多关系

Spring Data JPA (2) 一对多关系  
  • 前言:只要有kotlin-jpa,就可以在JPA中使用data class,非常舒服
  • 一对多关系是开发中最常见的多表关系
  • 在JPA中,以下注解和属性对你有帮助
    • @ManyToOne
      • targetEntity
    • @OneToMany
      • targetEntity
        • 接收一个ClassName
      • mappedBy
        • 映射到多方所维护的外键所对应的属性
      • cascade
        • 指定级联关系,当对该表操作时,所关联的表是否也要进行操作
    • @JoinColumns
      • referencedColumnName
        • 指定多方关联一方的列名
      • name
        • 指定维护的外键名
  • 一对多关系
    • 无论是一的一方还是多的一方,都可以通过 @JoinColumns 的referencedColumnName来指定外键名
    • 不过,在通过一的一方维护自己外键的时候,会多出一条update语句,这条语句没有必要
      • we then use property mappedBy to reflect 外键 from 多方
      • 要确定的是多方映射到一方中,一方的属性名叫什么,而不是类名叫什么
      • 这个属性名,就是mappedBy映射的管道
  • @Entity的映射:
    • 一方通过Set来反应多方
    • 多方则把一方的对象当普通属性来看
    • 我们对一方的Set添加多方,或者对多方中所在的一方的类赋值,都可以维护外键
  • 删除
    • 在删除的时候,如果外键没有关联,则可以随便删除
    • 如果外键有关联,那么在删除一方的时候:
      • 会首先把多表外键置为NULL,如果外键设置了非空,则会报错
      • 这个操作,是通过一表来维护外键的,如果置了一表的外键是mappedBy,那么一表将不能自主设置外键,会报错
      • 解决方案:使用级联删除 cascade=CascadeType.REMOVE
上一篇:Java进阶:JVM探究:全面解析OOM异常


下一篇:面试杂谈 - 内存泄漏如何排查