我已经在 Spring 应用程序中实现了审核列,当我创建一个新实体时,它可以工作,列已设置,但是当我更新实体时,我发现两个 @Createdby 和 @CreatedDate 设置为 null,我该如何制作这些创建后列不可更改:
@MappedSuperclass
public abstract class Audit implements Serializable {
@CreatedBy
private String createdBy;
@CreatedDate
private Date createdDate;
@LastModifiedBy
private String lastModifiedBy;
@LastModifiedDate
private Date lastModifiedDate;
}
Run Code Online (Sandbox Code Playgroud)
对我来说它有效:
\n@MappedSuperclass\npublic class Auditor {\n\n @Column(name = "created_date", updatable = false)\n @CreatedDate\n private long createdDate;\n\n @Column(name = "modified_date")\n @LastModifiedDate\n private long modifiedDate;\n\n @Column(name = "created_by", updatable = false)\n @CreatedBy\n private String createdBy;\n\n @Column(name = "modified_by")\n @LastModifiedBy\n private String modifiedBy;\n}\n
Run Code Online (Sandbox Code Playgroud)\n并扩展类:
\n@Entity\n@EntityListeners(AuditingEntityListener.class)\npublic class Material extends Auditor {\n\n @Id\n @SequenceGenerator(name = "seq_material", sequenceName = "seq_material")\n @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_material")\n private Long id;\n\n @Column\n @NotBlank(message = "Nome \xc3\xa9 um campo obrigat\xc3\xb3rio!.", groups = validacaoProd.class)\n private String nome;\n\n More...\n}\n
Run Code Online (Sandbox Code Playgroud)\n我更新了数据库中的记录:
\nupdate material set created_date = 1618418750189, modified_date = 1618418750189 \n
Run Code Online (Sandbox Code Playgroud)\n
小智 0
您可以在类级别使用@DynamicUpdate。它只会考虑更新列并忽略其他列以放入 UPDATE 查询。
参考:https: //www.baeldung.com/spring-data-jpa-dynamicupdate
归档时间: |
|
查看次数: |
11912 次 |
最近记录: |