想象一下下面的兩個實體。 Element
是包含一些數據的簡單類:JPA - 「版本」的實體,諮詢設計需要
@Entity
public class Element {
private String data;
public String getData() { return data; }
public void setData(String data) { this.data = data; }
}
下節課,命名爲VersionedElement
,擴展Element
幷包含最新版本以及不同的版本。這是我的「解決方案」:
@Entity
public class VersionedElement extends Element {
private Set<Element> versions;
private Element currentVersion;
@Override
public String getData() {
return getCurrentVersion().getData();
}
@Override
public void setData(String data) {
getCurrentVersion().setData(data);
}
@OneToMany
public Set<Element> getVersions() {
return versions;
}
public void setVersions(Set<Element> versions) {
this.versions = versions;
}
@ManyToOne
public Element getCurrentVersion() {
return currentVersion;
}
public void setCurrentVersion(Element currentVersion) {
this.currentVersion = currentVersion;
}
}
而且我不喜歡我寫的東西,它有什麼問題,太直接了當。首先,在後一類currentVersion
不被限制,也沒有關係versions
。看起來代碼缺少一些輔助類,或抽象層,或JPA註釋技術,或上述所有。我需要一個優雅的,值得爲這個簡單情況的JPA手動解決方案。 任何提示,鏈接或代碼片斷,將不勝感激。
是不是您當前版本的'這個'實例? – ThomasRS 2011-03-29 10:57:49
@Thomas,非常好的問題,在這種情況下,特別是在更改當前版本時,怎麼樣?我不知道。可能需要重寫類,將數據作爲單獨的類取出等。但是不同的數據必須有不同的ID,這是肯定的。我有點困惑 - 我期待着「隱藏你的代碼,這樣做,那是它被用來完成的方式,這是常見模式」。不能相信沒有人已經做到了。 – Osw 2011-03-29 11:28:35