AdminRevision.java
/*
* Copyright (C) 2025 B3Partners B.V.
*
* SPDX-License-Identifier: MIT
*/
package org.tailormap.api.persistence;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.JoinTable;
import jakarta.persistence.Table;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import org.hibernate.envers.DateTimeFormatter;
import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.ModifiedEntityNames;
import org.hibernate.envers.RevisionEntity;
import org.tailormap.api.persistence.listener.AdminRevisionListener;
/** Custom revision entity to store additional information about revisions. */
@Entity
@RevisionEntity
@EntityListeners(AdminRevisionListener.class)
@Table(name = "revisions", schema = "history")
public class AdminRevision extends DefaultRevisionEntity {
private String modifiedBy;
@ElementCollection
@JoinTable(name = "modified_entities", schema = "history", joinColumns = @JoinColumn(name = "revision_number"))
@Column(name = "modified_entity_name")
@ModifiedEntityNames
private Set<String> modifiedEntityNames = new HashSet<>();
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public Set<String> getModifiedEntityNames() {
return modifiedEntityNames;
}
public void setModifiedEntityNames(Set<String> modifiedEntityNames) {
this.modifiedEntityNames = modifiedEntityNames;
}
@Override
public final boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AdminRevision that)) return false;
if (!super.equals(o)) return false;
return Objects.equals(modifiedBy, that.modifiedBy);
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + Objects.hashCode(modifiedBy);
return result;
}
@Override
public String toString() {
return "AdminRevision{id = " + getId() + ", revisionDate = "
+ DateTimeFormatter.INSTANCE.format(getRevisionDate()) + ", modifiedBy='"
+ modifiedBy + '\'' + ", modifiedEntityNames="
+ String.join(", ", modifiedEntityNames) + '}';
}
}