在使用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字段。的主要内容,如果未能解决你的问题,请参考以下文章