2016-07-08 8 views
3

Я реализую Hibernate Envers в проекте, над которым я работаю, и для этого клиента таблицы и столбцы в базе данных должны следовать определенному шаблону имени. Шаблон имени использует имя таблицы для генерации части имени столбца, а таблица, в которой сохраняется версия, имеет другое имя (конечно) из исходной таблицы, поэтому мне нужно иметь возможность изменять имя столбца таблицы, сгенерированной Envers.Имя столбца HibernateEnvers

Как изменить имя столбца таблицы прослушивания сущности?

  • Я использую спящий режим 4.3.11-FINAL
  • У меня не было никаких проблем чейнинга имени и столбцов таблицы редакции (REVINFO) ни имя аудирования таблицы хозяйствующего субъекта
+0

Александр является правильным, нет никакого способа, чтобы настроить имена столбцов в настоящее время поскольку используемое имя используется в метаданных, считанных из таблицы логических источников. Я добавил новую проблему JIRA https://hibernate.atlassian.net/browse/HHH-10941. Не стесняйтесь добавлять голоса, если это что-то реально используется. – Naros

+0

Спасибо @Naros, только что проголосовали =) –

+0

Ну, так как hibernate поддерживает аннотацию @Column по свойствам Я надеялся, что в аннотации @Audit есть «@AuditColumn» или параметр «columName». –

ответ

3

Я не думаю, что Envers предоставляет эту функциональность (меняя имена столбцов), я надеюсь, что ошибаюсь.

Два варианта я мог думать, было бы:

  • углубиться в Envers код и попытаться увидеть, как вы можете настроить способ записи данных в области аудита, я имею в виду идентификации колонки часть
  • изменить способ аудита работает, идут, например, для подхода, который мог бы использовать триггеры
-1

REVINFO является таблица по умолчанию по умолчанию RevisionListener

Вам необходимо создать пользовательскую ревизию Listener, которая реализует RevisionListener и ваш пользовательский revsionEntity.

Пользовательское Entity СЛУШАТЕЛЬ:

public class CustomRevisionEntityListener implements RevisionListener { 

@Override 
public void newRevision(Object revisionEntity) { 
    CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity; 
    revision.setIPAddress("UserIPAddress"); 
} 
} 

И пользовательский объект, вы можете использовать любое имя таблицы и любые поля:

@Entity 
@Table(name="anyTableName") 
@RevisionEntity(CustomRevisionEntityListener.class) 
@Setter 
@Getter 
@EqualsAndHashCode 
public class CustomRevisionEntity implements Serializable { 

    @Id 
    @GeneratedValue 
    @RevisionNumber 
    @Column(name = "rev") 
    private int id; 

    @RevisionTimestamp 
    @Column(name = "revtstmp") 
    private long timestamp; 


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

} 
+0

Привет @Vivek, ваш ответ решает проблему изменения таблицы REVINFO, но это не то, что я искал ... Таблица REVINFO не является «таблицей прослушивания», она просто сохраняет информацию об изменениях –

Смежные вопросы