如何使用 JHipster 和 Hibernate Envers
How to use JHipster and Hibernate Envers
我无法弄清楚如何使用 Hibernate Envers 和 JHipster。
我正在使用 PostgreSQL 存储数据,最新的 Jhipster 2.6.0
我刚刚生成了一个 JHipster 应用程序,根本没有进行任何修改。
用户域 class 扩展了具有 @Audited 注释的 AbstractAuditingEntity class,但是在编辑用户时没有在数据库中创建 t_user_aud table。
是否需要任何配置才能让 Hibernate Envers 保存修改?
我们目前使用 PersistentAuditEvent 实体来保存更改,而不是 "normal" t_user_aud table.
这是因为我们添加了额外的信息(这是为了安全审计),与 Envers 默认存储的信息相比。
我有一个 github 存储库,显示了如何为 jhipster 2.6.0 的 postgres 添加它
生成 jhipster 应用程序后,创建 postgres 数据库,生成实体(例如 yo jhipster:entity Foo
),并应用所有以前的数据库修订版(运行 mvn spring-boot:run
以确保它运行s 以前的数据库修订版)。
警告: 'spring-data-envers' 导致 QueryDsl 中断。 (参见:https://github.com/spring-projects/spring-data-envers/issues/30). Furthermore, 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'。
将 spring-data-envers 添加到您的 pom.xml。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-envers</artifactId>
<version>0.2.0.RELEASE</version>
</dependency>
将 @Audited
添加到域包中的实体 class
- 将
repositoryFactoryBeanClass=org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean.class
添加到 DatabaseConfiguration.java 中的 @EnableJpaRepositories 注释(即更改行,使其类似于 @EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class
)
- 添加扩展 DefaultRevisionEntity 的 CustomRevisionEntity 以将任何特殊内容添加到您的修订 tables(例如,进行更改的人的登录名)
- 添加实现 RevisionListener 的 CustomRevisionListener 以设置 CustomRevisionEntity 中的字段
mvn liquibase:diff
将生成您的更改日志以添加审核
- 将更新日志添加到 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
mvn spring-boot:run
将再次应用更改日志
- 通过 运行ning 应用创建实体
- 打开 pgAdmin3 查看审核 table 历史记录!
希望这对您有所帮助。
我已经包含了来源:https://github.com/sdoxsee/jhipster-app-envers
有用的参考资料:
我无法弄清楚如何使用 Hibernate Envers 和 JHipster。
我正在使用 PostgreSQL 存储数据,最新的 Jhipster 2.6.0 我刚刚生成了一个 JHipster 应用程序,根本没有进行任何修改。 用户域 class 扩展了具有 @Audited 注释的 AbstractAuditingEntity class,但是在编辑用户时没有在数据库中创建 t_user_aud table。
是否需要任何配置才能让 Hibernate Envers 保存修改?
我们目前使用 PersistentAuditEvent 实体来保存更改,而不是 "normal" t_user_aud table.
这是因为我们添加了额外的信息(这是为了安全审计),与 Envers 默认存储的信息相比。
我有一个 github 存储库,显示了如何为 jhipster 2.6.0 的 postgres 添加它
生成 jhipster 应用程序后,创建 postgres 数据库,生成实体(例如 yo jhipster:entity Foo
),并应用所有以前的数据库修订版(运行 mvn spring-boot:run
以确保它运行s 以前的数据库修订版)。
警告: 'spring-data-envers' 导致 QueryDsl 中断。 (参见:https://github.com/spring-projects/spring-data-envers/issues/30). Furthermore, 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'。
将 spring-data-envers 添加到您的 pom.xml。
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-envers</artifactId> <version>0.2.0.RELEASE</version> </dependency>
将
@Audited
添加到域包中的实体 class- 将
repositoryFactoryBeanClass=org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean.class
添加到 DatabaseConfiguration.java 中的 @EnableJpaRepositories 注释(即更改行,使其类似于@EnableJpaRepositories(basePackages="com.mycompany.myapp.repository", repositoryFactoryBeanClass=EnversRevisionRepositoryFactoryBean.class
) - 添加扩展 DefaultRevisionEntity 的 CustomRevisionEntity 以将任何特殊内容添加到您的修订 tables(例如,进行更改的人的登录名)
- 添加实现 RevisionListener 的 CustomRevisionListener 以设置 CustomRevisionEntity 中的字段
mvn liquibase:diff
将生成您的更改日志以添加审核- 将更新日志添加到 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.
注意:当您运行您的测试(使用 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
mvn spring-boot:run
将再次应用更改日志- 通过 运行ning 应用创建实体
- 打开 pgAdmin3 查看审核 table 历史记录!
希望这对您有所帮助。
我已经包含了来源:https://github.com/sdoxsee/jhipster-app-envers
有用的参考资料: