实体更新后@Createdby @CreatedDate为空

Bil*_*KAR 12 java spring jpa

我已经在 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)

Rog*_*ana 8

对我来说它有效:

\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

我更新了数据库中的记录:

\n
update 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