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會認為是修改了,所以會刷新所有字段為新的對象。如果要實現只更新某些字段,可以先查詢出原對象,然后把需要修改的值賦值到原對象,保存即可??梢允褂?strong>BeanUtils.copy,指定某些字段需要忽略的即可。