Hibernate envers не может расширить defaultrevisionentity

Я пытаюсь расширить DefaultRevisionEntity, чтобы добавить имя пользователя в текущую ревизию. Однако вместо простого добавления нового поля создается совершенно новая таблица. Код выглядит следующим образом

AuditRevisionEntity

package com.example.demo;

import org.hibernate.envers.DefaultRevisionEntity;

import javax.persistence.Entity;
import javax.persistence.EntityListeners;

@Entity
@EntityListeners(AuditRevisionListener.class)
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

AuditRevisionListener

package com.example.demo;

import org.hibernate.envers.RevisionListener;

public class AuditRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        AuditRevisionEntity rev = (AuditRevisionEntity) revisionEntity;
        rev.setUser("MYUSER");
    }
}

Пользователь

package com.example.demo;

import org.hibernate.envers.Audited;
import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

@Entity
@Audited
@Table(name = "users")
public class User {

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

    @NotBlank()
    @Size(min = 1, max = 100)
    @Column(name = "email")
    private String email;

    @NotBlank()
    @Size(min = 1, max = 100)
    @Column(name = "password")
    private String password;

}

В результате чего

enter image description here

группа компиляции: 'org.hibernate', имя: 'hibernate-envers', версия: '5.3.7.Final'

prola 26.10.2018 05:08
0
1
677
2

Ответы 2

В вашем настраиваемом RevisionEntity отсутствует необходимая аннотация @RevisionEntity.

package com.example.demo;

import org.hibernate.envers.DefaultRevisionEntity;

import javax.persistence.Entity;
import javax.persistence.EntityListeners;

@Entity
@RevisionEntity( AuditRevisionListener.class )
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

Более подробную информацию и образец кода можно найти в Документация Envers

Привет, спасибо за помощь, но он все еще добавляет новую таблицу, а не просто добавляет новое поле

prola 26.10.2018 14:58

Я считаю, что исправил это, добавив таблицу в настраиваемую сущность, указывающую на основную таблицу revinfo.

@Entity
@RevisionEntity( AuditRevisionListener.class )
@Table(name = "revinfo")
public class AuditRevisionEntity extends DefaultRevisionEntity {
    private String user;

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }
}

Другие вопросы по теме