【发布时间】:2014-02-14 00:56:40
【问题描述】:
是否有可能以某种方式告诉 Hibernate 在执行 CRUD 操作时有条件地忽略数据库表中的缺失列?
我有一个使用 Hibernate 作为持久层的 Java 应用程序。我希望能够以某种方式告诉 Hibernate:如果数据库版本 。
这种情况是由于不同客户端的数据库版本不同,但所有站点的实体代码相同。例如,我有一个类,其中 description2 列在某些数据库中可能会丢失。
@Entity
@Table(name = "MY_TABLE")
public class MyTable implements java.io.Serializable {
private Integer serialNo;
private String pickCode;
private String description1;
private String description2;
@Id
@Column(name = "Serial_No", nullable = false)
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator")
public Integer getSerialNo() {
return this.serialNo;
}
@Column(name = "Pick_Code", length = 25)
public String getPickCode() {
return this.pickCode;
}
@Column(name = "Description1")
public String getDescription1() {
return this.description1;
}
@Column(name = "Description2") // <- this column might miss in some databases
//@TransientIf(...) <- something like this would be nice, or any other solution
public String getDescription2() {
return this.description2;
}
}
背景:我有一个大型应用程序,其中包含针对不同客户的大量自定义项。现在不时会发生一个客户端(比如说 500 个)获得需要更新数据库结构的新功能(例如,表中的新字段)。我为他发布了一个新版本,他运行数据库模式更新并且可以使用新功能。但是,当任何用户获得新功能时,所有其他客户端都不会进行增量数据库更新。他们只想使用最新版本,但受到他们永远不会使用的新功能(针对那个客户)的影响。
【问题讨论】:
标签: java database hibernate annotations