发布
社区首页 >问答首页 >在事务方法中访问时,JPA审核LastModifiedBy/LastModifiedDate为空

在事务方法中访问时,JPA审核LastModifiedBy/LastModifiedDate为空
EN

Stack Overflow用户
提问于 2019-01-23 18:14:36
回答 1查看 2.2K关注 0票数 0

我的审计设置如下所示,它们运行良好。问题是当我想在更新之前在事务性方法中访问它们时,更新id/date总是为null,我不知道为什么。

代码语言:javascript
代码运行次数:0
复制
@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;

调用保存的create/update方法。

注意:这两种方法都很好,可以使用正确的create/update审计值在数据库中创建/更新记录。问题是我无法在update方法中访问update id/date,我不知道为什么/如何修复它。

代码语言:javascript
代码运行次数:0
复制
@Override
@Transactional
public MyObj create(MyObj myObj) {
    MyObj createdMyObj = myObjRepo.save(myObj);
    System.out.println(createdMyObj.getCreateId()); // This works fine
    return createdMyObj;
}

@Override
@Transactional
public MyObj update(MyObj myObj) {
    MyObj updatedMyObj = myObjRepo.save(myObj);
    System.out.println(updatedMyObj.getUpdateId()); // This is null
    return updatedMyObj;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-24 07:00:25

Spring的审计特性是基于JPA生命周期事件的,只有当JPA实现实际更新数据库时才触发用于设置上次修改的列。,在许多情况下,数据库是在事务结束时触发的。

JPA规范第3.5.3节

PreUpdate和PostUpdate回调分别发生在对实体数据的数据库更新操作之前和之后。这些数据库操作可能发生在实体状态更新时,也可能发生在将状态刷新到数据库时(可能在事务结束时)。

因此,如果希望设置这些值,则需要刷新持久性上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54333296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档