Автоматически заполняет созданную дату, последнюю_модированную дату, созданную_последовательность и последнюю_модифицированную_байю в объекте: Hibernate с JPA - PullRequest
1 голос
/ 03 мая 2020

Я новичок в Hibernate и JPA. У меня есть несколько сущностей, каждая из которых содержит следующие четыре столбца:

1. created_by
2. last_modified_by
3. created_date
4. last_modified_date

Мне бы хотелось, чтобы эти столбцы автоматически заполнялись при сохранении связанной сущности.

Ниже приведены два примера сущностей. :

Сущность 1:

    @Entity
    @Table(name = "my_entity1")
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    public class MyEntity1 implements Serializable {

    private static final long serialVersionUID = 1L;

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

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

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

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

    @Column(name = "created_date")
    private Instant createdDate;

    @Column(name = "last_modified_date")
    private String lastModifiedDate;
}

Сущность 2:

    @Entity
    @Table(name = "my_entity2")
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
    public class MyEntity2 implements Serializable {

    private static final long serialVersionUID = 1L;

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

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

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

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

    @Column(name = "created_date")
    private Instant createdDate;

    @Column(name = "last_modified_date")
    private String lastModifiedDate;
}

В этом контексте я перешел через следующие сообщения: Как автоматически сгенерировать созданное или измененное поле метки времени? , Как сделать так, чтобы столбец create_at генерировал дату и время создания автоматически, как автоматически создается идентификатор? .

Я получаю, как захватить поля дат, но я не могу понять, как захватить create_by и last_modified_by.

1 Ответ

1 голос
/ 03 мая 2020

Автор аудита, использующий AuditorAware и Spring Security ...

Чтобы сообщить JPA о текущем вошедшем в систему пользователе, нам потребуется предоставить реализацию AuditorAware и переопределить метод getCurrentAuditor (). А внутри getCurrentAuditor () нам нужно выбрать текущего зарегистрированного пользователя.

Примерно так:

public class AuditorAwareImpl implements AuditorAware<String> {

    @Override
    public String getCurrentAuditor() {
        return "TestUser";
        // Can use Spring Security to return currently logged in user
        // return ((User) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getUsername()
    }
}

Теперь включите аудит jpa с помощью @EnableJpaAuditing

@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class JpaConfig {
    @Bean
    public AuditorAware<String> auditorAware() {
        return new AuditorAwareImpl();
    }
}

Посмотрите на это , чтобы получить более подробную информацию ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...