Как использовать Jhipster и Hibernate Envers



Мне трудно понять, как использовать Hibernate Envers и JHipster.



Я использую PostgreSQL для хранения данных и последнюю версию Jhipster 2.6.0
Я только что сгенерировал приложение JHipster, без каких-либо изменений вообще.
Класс домена пользователя расширяет класс AbstractAuditingEntity, который имеет аннотацию @Audited, но при редактировании пользователя в базе данных не создается таблица t_user_aud.



Есть ли какая-либо конфигурация, необходимая для сохранения Hibernate Envers модификации ?

553   2  

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.

  1. Добавьте spring-data-envers в ваш pom.XML.

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-envers</artifactId>
        <version>0.2.0.RELEASE</version>
    </dependency>
    
  2. Добавьте @Audited к своей сущности класс в пакете домена

  3. добавьте repositoryFactoryBeanClass=org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean.class в аннотацию @EnableJpaRepositories в DatabaseConfiguration.java (т. е. измените строку так, чтобы она была чем-то вроде @EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class)
  4. добавьте CustomRevisionEntity, который расширяет DefaultRevisionEntity, чтобы добавить что-нибудь особенное в ваши таблицы ревизий (например, имя пользователя, внесшего изменение)
  5. добавьте CustomRevisionListener, который реализует RevisionListener для установки полей в вашем CustomRevisionEntity
  6. mvn liquibase:diff будет генерировать ваш список изменений для добавления аудита
  7. добавьте список изменений в 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. Либо игнорируйте тесты, либо добавьте что-то вроде этого

<changeSet author="sdoxsee" id="1426529918864-0">
   <sql dbms="postgresql">CREATE DOMAIN "tinyint" AS smallint</sql>
</changeSet>
Так что H2 будет счастлив, а postgres будет счастлив. В противном случае вы получите

org.hibernate.HibernateException: Wrong column type in JHIPSTER.PUBLIC.T_FOO_AUD for column REVTYPE. Found: smallint, expected: tinyint

Когда вы бежите mvn test

  1. mvn spring-boot:run снова применит список изменений
  2. создание сущности через запуск приложения
  3. откройте pgAdmin3, чтобы просмотреть историю таблицы аудита!

Надеюсь, это поможет.

Я включил источник: https://github.com/sdoxsee/jhipster-app-envers

Полезная ссылка:

В настоящее время мы используем сущность PersistentAuditEvent для сохранения изменений, а не "обычную" таблицу t_user_aud.

Это происходит потому, что мы добавляем дополнительную информацию (это для аудита безопасности), по сравнению с тем, что Envers хранит по умолчанию.

Comments

    Ничего не найдено.