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