не обновляется поле по таблице с использованием JPA - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть таблица 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, который управляет Audit.

    @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;

}

Теперь, когда я пытаюсь извлечь данные из таблицы, используя идентификатор:

savedEntityDetailTest = entityDetailRepository.findById(id);

Все атрибуты, которые приходят из AuditableEntity, возвращаются с нулевым значением.

что означает, что когда я пытаюсь получить поле updatedBy, используя следующую строку, оно возвращает ноль.

savedEntityDetailTest.getUpdatedBy();

, тогда как, когда я пытаюсь получить комментарии таким же образом, я получаю значение, которое сохраняется в таблице.

savedEntityDetailTest.getcomments();

Пожалуйста, предложите мне приспособление или обходной путь.

1 Ответ

0 голосов
/ 22 апреля 2020

Добавить 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...