如何使用JHipster和Hibernate Envers

奥利维尔·吉耶(Olivier Guillet)

我在弄清楚如何使用Hibernate Envers和JHipster时遇到了麻烦。

我正在使用PostgreSQL来存储数据,而最新的Jhipster 2.6.0我刚刚生成了一个JHipster应用程序,根本没有任何修改。User域类扩展了AbstractAuditingEntity类,该类具有@Audited批注,但是在编辑用户时,数据库中没有创建t_user_aud表。

为了使Hibernate Envers保存修改,是否需要任何配置?

Sdoxsee

我有一个github存储库,显示了如何为jhipster 2.6.0的postgres添加它。

生成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问题,请跳过步骤1和3删除“ spring-data-envers”。

  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在DatabaseConfiguration.java中添加到@EnableJpaRepositories批注中(即,更改该行,使其类似于@EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class
  4. 添加扩展DefaultRevisionEntity的CustomRevisionEntity,以向修订表添加任何特殊内容(例如,进行更改的用户的登录名)
  5. 添加实现RevisionListener的CustomRevisionListener来设置CustomRevisionEntity中的字段
  6. mvn liquibase:diff 将生成您的变更日志以添加审核
  7. 将更改日志添加到src / main / resources / config / liquibase / master.xml

注意:liquibase-3.3.2无法将INT4识别为postgres的autoIncrement,因此会抛出此错误java.lang.RuntimeException: Unknown property autoIncrement for liquibase.datatype.core.UnknownType INT4您可以将其更改为“ SERIAL”,但是您将与进一步生成的变更日志进行斗争。我建议升级到liquibase-3.3.3(请参阅https://github.com/liquibase/liquibase/commit/1602ddf1cf4968753e09a6858fc1580230a2fb44),但您还必须<liquibaseShouldRun>true</liquibaseShouldRun>在pom.xml中添加到liquibase插件配置中。

注意:当您运行测试(使用H2)时,H2期望REVTYPE使用tinyint而不是smallint。忽略测试或添加类似的内容

<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

有用的参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章