如何使用JHipster和Hibernate Envers

时间:2015-03-26 23:10:55

标签: jhipster

我无法弄清楚如何使用Hibernate Envers和JHipster。

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

是否需要任何配置才能让Hibernate Envers保存修改?

2 个答案:

答案 0 :(得分:9)

我有一个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. 中的实体类
  4. repositoryFactoryBeanClass=org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean.class添加到DatabaseConfiguration.java中的@EnableJpaRepositories注释中(即更改行,使其类似于@EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class
  5. 添加扩展DefaultRevisionEntity的CustomRevisionEntity,以便为您的修订表添加任何特殊内容(例如登录更改的人员)
  6. 添加实现RevisionListener的CustomRevisionListener以设置CustomRevisionEntity中的字段
  7. mvn liquibase:diff将生成用于添加审核的更改日志
  8. 将更改日志添加到src / main / resources / config / liquibase / master.xml
  9. 注意:liquibase-3.3.2无法识别用于postgres的autoIncrement的INT4,并会抛出此 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. 创建实体
    4. 打开pgAdmin3以查看审核表历史记录!
    5. 希望这会有所帮助。

      我已经包含了来源:https://github.com/sdoxsee/jhipster-app-envers

      有用的参考:

答案 1 :(得分:0)

我们目前使用PersistentAuditEvent实体来保存更改,而不是&#34; normal&#34; t_user_aud表。

这是因为我们添加了额外的信息(这是用于安全审核),与Envers默认存储的信息相比。