@Table(name = "REVINFO", catalog= "another_catalog") 的目录值可以替换为外部配置文件的值吗?

Can catalog value of @Table(name = "REVINFO", catalog= "another_catalog") be replaced by external config file's value?

我正在使用 Hibernate Envers 并创建了一个自定义 REVINFO 实体。实体是:

@Entity
@RevisionEntity(AuditRevisionListener.class)
@Table(name = "envers_info", catalog = "another_catalog")
public class AuditEnversInfo extends DefaultRevisionEntity {

    @Column(name = "user_id")
    private String userId;
}

我的问题是,如何根据外部配置文件(例如SpringBoot中的application.properties值替换@Table注解上目录字段的值? 我希望它是动态的,所以一旦我将外部配置文件更改为另一个 catalog/schema,它将自动更改其 catalog/schema 以保留审计记录。

Envers 允许您通过配置指定两个值之一来设置此值,具体取决于您的数据库平台的实现。

org.hibernate.envers.default_schema
org.hibernate.envers.default_catalog

既然你已经确定你的数据库平台想要使用 catalog 配置而不是 schema 配置,那么你只需要提供这在您的正常休眠 属性 配置文件中为

org.hibernate.envers.default_catalog=another_catalog

您可以在很多地方定义此配置

  • 在您的 application.ymlapplication.properties 文件中 spring-boot
  • 在您的 spring 应用程序的 java 配置中 SessionEntityManager 工厂。
  • 在应用程序 class 路径根目录中的 hibernate.properties 文件中。