Spring JPA 使用笔记01
- 如果需要程序生成分布式主键,那么注解上不需要
@GeneratedValue
, 否则hibernate不会生成该字段的sql。 - spring boot 2.x, 如果需要数据库自增长主键,需要配置
use-new-id-generator-mappings: false
. - spring boot 默认开启了
open-in-view
, 也就是数据层的Session从Controller层就开启,主要是针对前端模板渲染使用,如果是纯api接口,可以关闭spring.jpa.open-in-view: false
. - 如果
@Entity
使用父类继承,需要在父类上加上注解@MappedSuperclass
, JPA在扫描的时候才会识别父类的字段. - 如果使用了
@CreatedDate
,@LastModifiedDate
, 需要在启动类上加上注解:@EnableJpaAuditing
. - 注解
@DynamicUpdate
的逻辑是: 在更新的时候,先查询数据库的数据,然后和更新的对象进行比较,如果有改动的,才会更新,生成sql语句,如果前端传入的数据只有某些字段,那么其他字段为NULL,Hibernate会认为是修改了,所以会刷新所有字段为新的对象。如果要实现只更新某些字段,可以先查询出原对象,然后把需要修改的值赋值到原对象,保存即可。可以使用BeanUtils.copy,指定某些字段需要忽略的即可。