是否可以在运行时修改@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 帮助(没有严重的头痛,也有它们)。我看到有几种方法可以解决您的问题:
- 尝试理解为什么主键列有空值并更正它们。
- 将代码分成两个分支,并为每个服务器构建指定的包。
- 查找自然键并使用 EmbeddedId。
我有一些实体映射到 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 帮助(没有严重的头痛,也有它们)。我看到有几种方法可以解决您的问题:
- 尝试理解为什么主键列有空值并更正它们。
- 将代码分成两个分支,并为每个服务器构建指定的包。
- 查找自然键并使用 EmbeddedId。