Как использовать Jhipster и Hibernate Envers
Мне трудно понять, как использовать Hibernate Envers и JHipster.
Я использую PostgreSQL для хранения данных и последнюю версию Jhipster 2.6.0
Я только что сгенерировал приложение JHipster, без каких-либо изменений вообще.
Класс домена пользователя расширяет класс AbstractAuditingEntity, который имеет аннотацию @Audited, но при редактировании пользователя в базе данных не создается таблица t_user_aud.
Есть ли какая-либо конфигурация, необходимая для сохранения Hibernate Envers модификации ?
2 ответов:
У меня есть репозиторий github, который показывает, как добавить его для postgres для jhipster 2.6.0
После создания приложения jhipster создается база данных postgres, генерируется сущность (например,
yo jhipster:entity Foo) и применяются все предыдущие версии БД (запуститеmvn spring-boot:run, чтобы убедиться, что она выполняет предыдущие версии БД).Предупреждение: 'spring-data-envers' вызывает разрывы QueryDsl. (См.: https://github.com/spring-projects/spring-data-envers/issues/30 )., https://github.com/spring-projects/spring-data-envers/issues/33#issuecomment-108796022 говорит, что проект "spring-data-envers" не является приоритетным. Уже включенный в jhipster проект "hibernate-envers" позволяет использовать envers без использования "spring-data-envers" ...поэтому, если вы хотите избежать проблем с QueryDsl, удалите "spring-data-envers", пропустив Шаг 1 и 3.
Добавьте spring-data-envers в ваш pom.XML.
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-envers</artifactId> <version>0.2.0.RELEASE</version> </dependency>Добавьте
@Auditedк своей сущности класс в пакете домена- добавьте
repositoryFactoryBeanClass=org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean.classв аннотацию @EnableJpaRepositories в DatabaseConfiguration.java (т. е. измените строку так, чтобы она была чем-то вроде@EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class)- добавьте CustomRevisionEntity, который расширяет DefaultRevisionEntity, чтобы добавить что-нибудь особенное в ваши таблицы ревизий (например, имя пользователя, внесшего изменение)
- добавьте CustomRevisionListener, который реализует RevisionListener для установки полей в вашем CustomRevisionEntity
mvn liquibase:diffбудет генерировать ваш список изменений для добавления аудита- добавьте список изменений в src / main / resources / config/liquibase / master.xml
Примечание : liquibase-3.3.2 не распознает INT4 для autoIncrement для postgres и выбросит это
java.lang.RuntimeException: Unknown property autoIncrement for liquibase.datatype.core.UnknownType INT4. Вы можете изменить его на "серийный", но вы будете бороться с дальнейшими сгенерированными списками изменений. Я бы рекомендовал перейти на liquibase-3.3.3 (см. https://github.com/liquibase/liquibase/commit/1602ddf1cf4968753e09a6858fc1580230a2fb44 ) но ты будешь также нужно добавить<liquibaseShouldRun>true</liquibaseShouldRun>в конфигурацию плагина liquibase в вашем pom.XML.Примечание: при выполнении тестов (с использованием H2), H2 ожидает tinyint вместо smallint для REVTYPE. Либо игнорируйте тесты, либо добавьте что-то вроде этого
Так что H2 будет счастлив, а postgres будет счастлив. В противном случае вы получите<changeSet author="sdoxsee" id="1426529918864-0"> <sql dbms="postgresql">CREATE DOMAIN "tinyint" AS smallint</sql> </changeSet>
org.hibernate.HibernateException: Wrong column type in JHIPSTER.PUBLIC.T_FOO_AUD for column REVTYPE. Found: smallint, expected: tinyintКогда вы бежите
mvn test
mvn spring-boot:runснова применит список изменений- создание сущности через запуск приложения
- откройте pgAdmin3, чтобы просмотреть историю таблицы аудита!
Надеюсь, это поможет.
Я включил источник: https://github.com/sdoxsee/jhipster-app-envers
Полезная ссылка:
В настоящее время мы используем сущность PersistentAuditEvent для сохранения изменений, а не "обычную" таблицу t_user_aud.
Это происходит потому, что мы добавляем дополнительную информацию (это для аудита безопасности), по сравнению с тем, что Envers хранит по умолчанию.
Comments