Самое простое решение - это сделать
@Entity
@Table(name = "REVINFO")
@RevisionEntity(UserRevisionListener.class)
public class UserRevEntity extends DefaultRevisionEntity {
...
}
Если вы заметили, я явно добавил аннотацию @Table
для решения проблемы.
Причина, по которой вы столкнулись с этимпользовательский объект-редакция имеет много общего с обнаружением объекта.
В сценарии по умолчанию, где вы не предоставляете настраиваемую сущность ревизии, Энверс фактически использует класс и вручную отображает этот класс как сущность в конфигурации сопоставления Hibernate XML.В этом сценарии по умолчанию мы явно сообщаем ORM, что для этого класса используется вспомогательная таблица REVINFO
.
Когда вы предоставляете свой собственный пользовательский объект редакции, это сопоставление сущностей фактически сначала обнаруживается ORM, поскольку оно являетсяреальная сущность в вашей доменной модели.Это означает, что Envers должен проверять сопоставления сущностей, которые ORM имеет во время начальной загрузки, и если он обнаружен с помощью @RevisionEntity
, мы не отправляем сопоставление Hibernate XML с конфигурацией по умолчанию.
Побочный эффект заключается в том, чтоORM определил такие вещи, как имя таблицы, имя объекта, имя столбца и т. Д. Для всех данных отображения из вашей пользовательской версии-ревизии, это те атрибуты, которые мы не можем технически изменить в тот момент, когда происходит этот загрузчик, эти данныеуже был привязан обычным процессом начальной загрузки ORM.
Поэтому, если вы хотите наложить вашу пользовательскую сущность ревизии на таблицу по умолчанию и просто измените ее, добавив новый столбец, который вам нужен;вам нужно будет явно указать в своих аннотациях пользовательское сопоставление сущностей и заставить ORM использовать конкретное имя таблицы, иначе он будет использовать политику стратегии именования по умолчанию, именно поэтому вы начали видеть, что он использует UserRevEntity
вместоREVINFO
.
Добавьте @Table(name = "REVINFO")
, и он будет вставлен в REVINFO
, как всегда.