是否可以在运行时修改@Column() 的映射?

Is it possible to modify mapping for @Column() during runtime?

我有一些实体映射到 sql 视图

@Entity
@Immutable
@Table(name = "SOME_VIEW")
public class MyClass implements Serializable {

 @Id
 @Column(name = "SOME_COL", insertable = false, updatable = false)
 private Integer id;
 ...
}

今天有人告诉我,在其中一台服务器上,SOME_VIEW 中的 SOME_COL 列将填充空值,我应该使用 SOME_OTHER_COL 作为 id,具体取决于 config.properties 文件。 由于 @Column@Retention(RUNTIME),我是否可以在 tomcat 开始应用程序之前将映射更改为 @Column(name = "SOME_OTHER_COL")

不,您不能 "fool" 通过替换休眠,即使有 javassist 或 asm 帮助(没有严重的头痛,也有它们)。我看到有几种方法可以解决您的问题:

  1. 尝试理解为什么主键列有空值并更正它们。
  2. 将代码分成两个分支,并为每个服务器构建指定的包。
  3. 查找自然键并使用 EmbeddedId。