我的審計設置如下所示,它們工作正常。問題是當我想在更新之前在事務方法中訪問它們時,更新 id/date 始終為空,我不知道為什么。@CreatedBy@Column(name = "CREATE_ID", updatable = false, nullable = false)private String createId;@LastModifiedBy@Column(name = "UPDATE_ID", nullable = false)private String updateId;@CreatedDate@Column(name = "CREATE_DATE", updatable = false, nullable = false)private Date createDate;@LastModifiedDate@Column(name = "UPDATE_DATE", nullable = false)private Date updateDate;調用保存的創建/更新方法。注意:這兩個都可以正常工作,使用正確的創建/更新審計值在數據庫中創建/更新記錄。問題是我無法在更新方法中訪問更新 ID/日期,我不確定為什么/如何修復它。@Override@Transactionalpublic MyObj create(MyObj myObj) { MyObj createdMyObj = myObjRepo.save(myObj); System.out.println(createdMyObj.getCreateId()); // This works fine return createdMyObj;}@Override@Transactionalpublic MyObj update(MyObj myObj) { MyObj updatedMyObj = myObjRepo.save(myObj); System.out.println(updatedMyObj.getUpdateId()); // This is null return updatedMyObj;}
1 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
Spring Data JPA 的審計功能基于 JPA 生命周期事件,用于設置最后修改列的事件PreUpdate
僅在 JPA 實現實際更新數據庫時觸發,這在許多情況下是在事務結束時。
請參閱JPA 規范的第 3.5.3 節:
PreUpdate 和 PostUpdate 回調分別發生在對實體數據進行數據庫更新操作之前和之后。這些數據庫操作可能發生在更新實體狀態時,也可能發生在狀態刷新到數據庫時(可能在事務結束時)。
因此,如果要設置這些值,則需要刷新持久性上下文。
添加回答
舉報
0/150
提交
取消