在使用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());
    }
}

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何确定iOS的React Native状态栏高度?

2022-4-21 8:00:14

解决方案

在python中比较两个列表,并将结果保存在一个单独的列表中。

2022-4-21 9:00:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索