在使用JPA的情况下,无法从表中获取updateBy字段。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用JPA的情况下,无法从表中获取updateBy字段。相关的知识,希望对你有一定的参考价值。

我有一个表 entity_detail,它的结构如下。

id  detail_id  center_code  Comments  updated_by  updated_on   created_on   created_by
1    121       0            Test      user        2020-04-22   2020-04-21   user
2    122       1            Test      user1       2020-04-22   2020-04-22   user

我有一个实体对应这个表

    @Entity(name = "entity_detail")
    public class EntityDetail extends AuditableEntity {

      private static final long serialVersionUID = 1L;

      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;

      private Long detailId;

      private Boolean centerCode;

      private String comments;
 }

有另一个类AuditableEntity来管理审计。

    @EntityListeners(AuditingEntityListener.class)
    @Data
    public class AuditableEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private Date createdOn;

    @LastModifiedBy
    private String updatedBy;

    @LastModifiedDate
    private Date updatedOn;

}

现在,当我试图通过使用id从表中获取数据时,所有来自AuditableEntity的属性都被返回。

savedEntityDetailTest = entityDetailRepository.findById(id);

所有来自AuditableEntity的属性都被返回为null.

这意味着当我尝试使用下面的行来获取updateBy字段时,它返回null。

savedEntityDetailTest.getUpdatedBy();

而当我试图以同样的方式获取注释时,我得到的是保存在表中的值。

savedEntityDetailTest.getcomments();

请给我一个固定的方法或变通的办法。

答案

添加 EnableJpaAuditing 上面的注释 main 类。

@SpringBootApplication
@EnableJpaAuditing
public class H2Database2Application {

    public static void main(String[] args) {
        SpringApplication.run(H2Database2Application.class, args);
    }

}

添加 MappedSuperclass 的注解。AuditableEntity 类。

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
@Data
public class AuditableEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @CreatedBy
    private String createdBy;

    @CreatedDate
    private Date createdOn;

    @LastModifiedBy
    private String updatedBy;

    @LastModifiedDate
    private Date updatedOn;

}

添加 Data 的注解。EntityDetail 类。

@Entity(name = "entity_detail")
@Data
public class EntityDetail extends AuditableEntity {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long detailId;

    private Boolean centerCode;

    private String comments;
}

并添加 AuditorAware 像下面这样。

@Component
public class SecurityAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {

        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if (authentication == null || !authentication.isAuthenticated()) {
            return Optional.empty();
        }

        return Optional.of(((User)authentication.getPrincipal()).getUsername());
    }
}

以上是关于在使用JPA的情况下,无法从表中获取updateBy字段。的主要内容,如果未能解决你的问题,请参考以下文章

使用jpa注释在一个事务中保存数据并在另一个事务中获取数据

如何阻止 eclipse 从表中自动创建 JPA 实体?

如何从表中获取字段列表和不同值

由于外键为空值,无法从表中获取数据

如何在没有ORM的情况下使用SQLAlchemy查询从表中删除行?

Rails:为循环的每次迭代从表中获取数据