【问题标题】:Envers not creating custom revision tableEnvers 不创建自定义修订表
【发布时间】:2018-09-22 15:02:17
【问题描述】:

我有一个带有自定义修订实体的应用,但是当我部署时,它会创建一个 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);
    }

弹簧配置文件属性:

 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 boot,并且没有带有手动映射的 .xml 文件

我真的看不出我在做任何与official guide 不同的事情,这里有什么想法吗?

【问题讨论】:

    标签: hibernate spring-boot hibernate-envers


    【解决方案1】:

    好的,所以我将留下关于我如何解决这个问题的答案,以防万一它可以帮助处于相同情况的其他人。

    在 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"
    

    【讨论】:

    • 执行此操作后出现错误hibernate.exception.SQLGrammarException: error performing isolated work。知道为什么会这样吗?
    • @proprius 很难说没有额外的信息,我的问题可以追溯到两年前并应用于一个非常具体的情况(和一个非常初级的开发人员)我实际上很想删除这个问题,因为我不确定它是否真的带来了价值我强烈建议您发布一个问题并提供您的设置的详细信息,快速谷歌搜索您遇到的错误给我几个与关系问题相关的条目
    猜你喜欢
    • 2012-01-04
    • 2014-10-04
    • 2012-10-25
    • 2011-11-21
    • 2019-10-28
    • 2011-06-08
    • 1970-01-01
    • 2013-05-24
    • 2018-04-16
    相关资源
    最近更新 更多