Java 在数据库中保存后,无法在保存的实体中获取lastModifiedBy列

Java 在数据库中保存后,无法在保存的实体中获取lastModifiedBy列,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我创建了一个JPA实体,如下所示: @Entity @Table(name = "my_table") public class MyEntity extends AbstractAuditingEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(generator = "custom-uuid&qu

我创建了一个JPA实体,如下所示:

@Entity
@Table(name = "my_table")
public class MyEntity extends AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(generator = "custom-uuid")
  @GenericGenerator(name = "custom-uuid",
      strategy = "generator.CustomUUIDGenerator")
  private String id;

  @Column(name = "name")
  private String name;

  @Column(name = "description")
  private String description;
  @MappedSuperclass
  @EntityListeners(AuditingEntityListener.class)
  public abstract class AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @CreatedBy
  @Column(name = "created_by", nullable = false, length = 50, updatable = false)
  @JsonIgnore
  private String createdBy;

  @CreatedDate
  @Column(name = "created_date", updatable = false)
  @JsonIgnore
  private Instant createdDate = Instant.now();

  @LastModifiedBy
  @Column(name = "last_modified_by", length = 50)
  @JsonIgnore
  private String lastModifiedBy;

  @LastModifiedDate
  @Column(name = "last_modified_date")
  @JsonIgnore
  private Instant lastModifiedDate = Instant.now();
MyEntity如下所示:

@Entity
@Table(name = "my_table")
public class MyEntity extends AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(generator = "custom-uuid")
  @GenericGenerator(name = "custom-uuid",
      strategy = "generator.CustomUUIDGenerator")
  private String id;

  @Column(name = "name")
  private String name;

  @Column(name = "description")
  private String description;
  @MappedSuperclass
  @EntityListeners(AuditingEntityListener.class)
  public abstract class AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @CreatedBy
  @Column(name = "created_by", nullable = false, length = 50, updatable = false)
  @JsonIgnore
  private String createdBy;

  @CreatedDate
  @Column(name = "created_date", updatable = false)
  @JsonIgnore
  private Instant createdDate = Instant.now();

  @LastModifiedBy
  @Column(name = "last_modified_by", length = 50)
  @JsonIgnore
  private String lastModifiedBy;

  @LastModifiedDate
  @Column(name = "last_modified_date")
  @JsonIgnore
  private Instant lastModifiedDate = Instant.now();
摘要审计实体如下所示:

@Entity
@Table(name = "my_table")
public class MyEntity extends AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @Id
  @GeneratedValue(generator = "custom-uuid")
  @GenericGenerator(name = "custom-uuid",
      strategy = "generator.CustomUUIDGenerator")
  private String id;

  @Column(name = "name")
  private String name;

  @Column(name = "description")
  private String description;
  @MappedSuperclass
  @EntityListeners(AuditingEntityListener.class)
  public abstract class AbstractAuditingEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  @CreatedBy
  @Column(name = "created_by", nullable = false, length = 50, updatable = false)
  @JsonIgnore
  private String createdBy;

  @CreatedDate
  @Column(name = "created_date", updatable = false)
  @JsonIgnore
  private Instant createdDate = Instant.now();

  @LastModifiedBy
  @Column(name = "last_modified_by", length = 50)
  @JsonIgnore
  private String lastModifiedBy;

  @LastModifiedDate
  @Column(name = "last_modified_date")
  @JsonIgnore
  private Instant lastModifiedDate = Instant.now();
现在,我用以下语句更新DB中的实体:

MyEntity savedEntity = threatCanvasRepository.save(myEntity);
这里,在
savedEntity
对象中,
lastModifiedBy
设置为null

尽管如此,当我从DB获取相同的数据时,我能够看到lastModifiedBy已设置。我无法理解我在这里错过了什么

编辑


最奇怪的是,我在响应中得到了createdDate和lastModifiedDate,但不是createdBylastModifiedBy

我假设您的服务是
@Transactional
,然后
Repository.save()
实际上并没有立即将其保存到数据库中,它将其添加到当前事务中以供以后处理<代码>@CreatedDate、
@CreatedBy
@LastModifiedBy
@LastModifiedDate
注释是在JPA实际提交事务时处理的(我假设是Hibernate)。因此,您需要在提交当前事务后从另一个服务获取。但通常情况下,你并不需要它。只要相信它们在DB中。

您在应用程序中启用了JPA审核吗

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaAuditingConfiguration {


    @Bean
    public AuditorAware<String> auditorProvider() {
        /*
          if you are using spring security, you can get the currently logged username with following code segment.
          SecurityContextHolder.getContext().getAuthentication().getName()
         */
        return new UsernameAuditorAware();
    }
}
import org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.data.domain.AuditorAware;
导入org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@配置
@启用JPA审核
公共类JpaAuditingConfiguration{
@豆子
公共AuditorAware auditorProvider(){
/*
如果您使用的是spring security,则可以使用以下代码段获取当前记录的用户名。
SecurityContextHolder.getContext().getAuthentication().getName()
*/
返回新的用户名AuditorAware();
}
}

这是@LastModifiedBy批注工作所必需的。

您是否配置了
AuditingEntityListener
并实现了
AuditorAware
?是的,我配置了。最奇怪的是,我得到了createddate和lastModifiedDate,但没有得到createdBy和lastModifiedBy。你能给我们展示一下
AuditorAware
的实现吗?是的@Viktar你完全正确。是的,事实上我想要回复中的字段。但我想没有办法让这些场在同一个流中。