Spring аудит данных JPA — как его спроектировать?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring аудит данных JPA — как его спроектировать?

Сообщение Anonymous »

Как разработать аудит сущностей в приложении Spring Boot?

Код: Выделить всё

@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;

@Column(name = "username", nullable = false)
private String username;

@Column(name = "password", nullable = false)
private String password;

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private List roles = new ArrayList();
}

Код: Выделить всё

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class AuditableEntity {

@CreatedDate
@Column(name = "created_on")
private LocalDateTime createdOn;

@CreatedBy
@Column(name = "created_by")
private User createdBy;

@LastModifiedDate
@Column(name = "updated_on")
private LocalDateTime updatedOn;

@LastModifiedBy
@Column(name = "updated_by")
private User updatedBy;
}
Я хочу, чтобы следующие данные хранились в каждой сущности, подлежащей аудиту:
  • createdBy >
  • createdDate
  • updatedBy
  • updatedDate
Можно ли сделать так, чтобы созданные и обновленные в AuditableEntity имели отношение один ко многим с сущностью User, поскольку один Пользователь может создать множество записей разных сущностей, но у сущности может быть только один создатель? Я не уверен, можно ли это сделать в MappedSuperclass, возможно, имеет смысл просто сохранить идентификатор пользователя в AuditableEntity?
В getCurrentAuditor< /code> реализация AuditorAware Я бы получил текущего участника из аутентификации, нашел объект User из базы данных с тем же идентификатором и вернул его:

Код: Выделить всё

 Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
CustomUserDetails user = (CustomUserDetails) authentication.getPrincipal();
return userService.findUserById(user.getId());

Код: Выделить всё

@Data
public class CustomUserDetails implements UserDetails {

private Long id;
private String username;
private String password;
private Collection

Подробнее здесь: [url]https://stackoverflow.com/questions/78250782/spring-jpa-data-auditing-how-to-design-it[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»