Envers 未创建自定义修订 table
Envers not creating custom revision table
我有一个带有自定义修订实体的应用程序,但是当我部署时,它会创建一个 REVINFO 默认实体:
修订实体:
@Entity
@Table(name = "CustomRevisionEntity", catalog = "molecular")
@RevisionEntity(CustomRevisionEntityListener.class)
public class CustomRevisionEntity extends DefaultRevisionEntity {
private String username;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
修订实体侦听器:
public class CustomRevisionEntityListener implements RevisionListener {
public final static String ANONYMOUS_USERNAME = "anonymous";
@Override
public void newRevision(Object revisionEntity) {
CustomRevisionEntity exampleRevEntity = (CustomRevisionEntity) revisionEntity;
String currentUserLogin;
if(SecurityUtils.getCurrentUserLogin().isPresent())
currentUserLogin = SecurityUtils.getCurrentUserLogin().get();
else
currentUserLogin = ANONYMOUS_USERNAME;
exampleRevEntity.setUsername(currentUserLogin);
}
Spring 配置文件属性:
jpa:
database-platform: org.hibernate.dialect.MySQL5Dialect
database: MYSQL
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: update
naming:
physical-strategy: org.wwarn.surveyorDM.config.HibernateAuditTablesNamingStrategy
properties:
hibernate.id.new_generator_mappings: false
hibernate.cache.use_second_level_cache: true
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.cache.region.factory_class: org.hibernate.cache.jcache.JCacheRegionFactory
Envers 版本是 5.2.12
此 question 不适用,因为我使用 Spring 启动并且没有带有手动映射的 .xml 文件
我真的看不出我所做的与official guide有什么不同吗?
好的,所以我会留下我是如何解决这个问题的答案,以防万一它可以帮助处于相同情况的其他人。
在 Spring 中,我们可以选择指定我们希望应用程序在启动时扫描的实体,在我的情况下,我需要指定它,前提是我必须通过 maven 从其他模块导入实体,所以在添加 entityScan 时,例如:
@EntityScan(basePackages = {
"org.wwarn.malaria.server.data",
"org.wwarn.chassis.server.data",
"org.wwarn.surveyorDM.domain.vivax",
"org.wwarn.surveyorDM.domain"})
我们告诉我们的应用程序在这些包中搜索实体,并且仅在这些包中,我的 RevisionEntity 配置在 config.envers 中,所以我所要做的就是将以下行添加到我的@EntityScan我可以个性化修订实体:
"org.wwarn.surveyorDM.config.envers"
我有一个带有自定义修订实体的应用程序,但是当我部署时,它会创建一个 REVINFO 默认实体:
修订实体:
@Entity
@Table(name = "CustomRevisionEntity", catalog = "molecular")
@RevisionEntity(CustomRevisionEntityListener.class)
public class CustomRevisionEntity extends DefaultRevisionEntity {
private String username;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
}
修订实体侦听器:
public class CustomRevisionEntityListener implements RevisionListener {
public final static String ANONYMOUS_USERNAME = "anonymous";
@Override
public void newRevision(Object revisionEntity) {
CustomRevisionEntity exampleRevEntity = (CustomRevisionEntity) revisionEntity;
String currentUserLogin;
if(SecurityUtils.getCurrentUserLogin().isPresent())
currentUserLogin = SecurityUtils.getCurrentUserLogin().get();
else
currentUserLogin = ANONYMOUS_USERNAME;
exampleRevEntity.setUsername(currentUserLogin);
}
Spring 配置文件属性:
jpa:
database-platform: org.hibernate.dialect.MySQL5Dialect
database: MYSQL
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: update
naming:
physical-strategy: org.wwarn.surveyorDM.config.HibernateAuditTablesNamingStrategy
properties:
hibernate.id.new_generator_mappings: false
hibernate.cache.use_second_level_cache: true
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.cache.region.factory_class: org.hibernate.cache.jcache.JCacheRegionFactory
Envers 版本是 5.2.12
此 question 不适用,因为我使用 Spring 启动并且没有带有手动映射的 .xml 文件
我真的看不出我所做的与official guide有什么不同吗?
好的,所以我会留下我是如何解决这个问题的答案,以防万一它可以帮助处于相同情况的其他人。
在 Spring 中,我们可以选择指定我们希望应用程序在启动时扫描的实体,在我的情况下,我需要指定它,前提是我必须通过 maven 从其他模块导入实体,所以在添加 entityScan 时,例如:
@EntityScan(basePackages = {
"org.wwarn.malaria.server.data",
"org.wwarn.chassis.server.data",
"org.wwarn.surveyorDM.domain.vivax",
"org.wwarn.surveyorDM.domain"})
我们告诉我们的应用程序在这些包中搜索实体,并且仅在这些包中,我的 RevisionEntity 配置在 config.envers 中,所以我所要做的就是将以下行添加到我的@EntityScan我可以个性化修订实体:
"org.wwarn.surveyorDM.config.envers"