是否有可能以某種方式告訴Hibernate在執行CRUD操作時有條件地忽略數據庫表中缺少的列?如何讓Hibernate有條件地忽略CRUD操作中的列
我有一個使用Hibernate作爲持久層的Java應用程序。我希望能夠以某種方式告訴Hibernate:如果數據庫版本爲< 50,那麼忽略此列註釋(或將其設置爲瞬態)。
出現這種情況是由於不同客戶端的數據庫版本不同,但所有站點的實體代碼相同。例如,我有一個類,其中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個)獲得需要數據庫結構更新的新功能(例如表中的新字段)。我爲他發佈一個新版本,他運行數據庫模式更新並可以使用新功能。但是,每當任何用戶獲得新功能時,所有其他客戶端都不會執行增量數據庫更新。他們只是想使用最新版本,但受到它們永遠不會使用的新功能(針對該客戶端)的影響。