如何在 JPA 中动态更改 Schema 的名称
Posted
技术标签:
【中文标题】如何在 JPA 中动态更改 Schema 的名称【英文标题】:How can I change the name of the Schema dynamically in JPA 【发布时间】:2019-07-07 23:38:53 【问题描述】:我正在使用 JPA 查询 flyway_schema_history 以打印已执行迁移的报告。 flyway_schema_history 的结构在我的 Postgresql 数据库中的所有模式中重复。另外,我在运行程序时将架构的名称作为参数传递。我使用的是 Java 10。
我在 JPA 中创建了这个实体。
@Entity
@Table(name = "flyway_schema_history", schema="this_should_be dynamic")
public class FlywaySchemaHistoryGeneric
@Id
@Column(name="installed_rank")
private Integer installedRank;
@Column(name="version")
private String version;
@Column(name="description")
private String description;
@Column(name="type")
private String type;
@Column(name="script")
private String script;
@Column(name="checksum")
private Integer checksum;
@Column(name="installed_by")
private String installedBy;
@Column(name="installed_on")
private Date installedOn;
@Column(name="execution_time")
private Integer executionTime;
@Column(name="success")
private Boolean success;
public Integer getInstalledRank()
return installedRank;
public void setInstalledRank(Integer installedRank)
this.installedRank = installedRank;
public String getVersion()
return version;
public void setVersion(String version)
this.version = version;
public String getDescription()
return description;
public void setDescription(String description)
this.description = description;
public String getType()
return type;
public void setType(String type)
this.type = type;
public String getScript()
return script;
public void setScript(String script)
this.script = script;
public Integer getChecksum()
return checksum;
public void setChecksum(Integer checksum)
this.checksum = checksum;
public String getInstalledBy()
return installedBy;
public void setInstalledBy(String installedBy)
this.installedBy = installedBy;
public Date getInstalledOn()
return installedOn;
public void setInstalledOn(Date installedOn)
this.installedOn = installedOn;
public Integer getExecutionTime()
return executionTime;
public void setExecutionTime(Integer executionTime)
this.executionTime = executionTime;
public Boolean getSuccess()
return success;
public void setSuccess(Boolean success)
this.success = success;
我试图使用 FlywaySchemaHistoryGeneric.class.getAnnotation 在运行时更改值但没有成功,但我认为这应该是一种简单的方法。 如何使 @table 中的架构成为动态的?
【问题讨论】:
【参考方案1】:我猜你不能在运行时修改它,因为注解是只读的。您可以为每个架构创建一个数据源,然后根据您的规则选择其中一个来持久化实体。
【讨论】:
以上是关于如何在 JPA 中动态更改 Schema 的名称的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring jpa实体中提及sqlserver数据库名称?
SpringBoot - Flyway - JPA 集成 - 创建名称为“flywayInitializer”的 bean 时出错 - information_schema 中的未知表“事件”