我重構了一些從標準SQL到JPA/ORM使用的類。在大多數情況下,對象具有「真實」引用,但有時對其他對象的引用僅由未經檢查的數據庫id引用(無外鍵,只是簡單的引用另一個表id的字符串)提供。JPA參考重構
代碼如下:
@Entity
public final class myEntity implements Serializable {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "ID")
private String id;
@OneToOne
@JoinColumn(name = "OBJREF", nullable = false)
private otherObject objReference; /* Nice object reference */
@Column(name = "OTHEROBJREF")
private String otherObjReference; /* Damn db reference used by legacy code */
}
我應該如何處理otherObjReference?該屬性由需要靜態getter/setter構造和String的遺留系統使用!如果我留在ID中,我會遇到JPA查詢問題,我不能簡單地分配一個對象並堅持下去。
我曾想過如何讓String瞬變並使用@PrePersist和@PreLoad加載「真實」對象引用,這樣我就可以同時使用它們。但在這些方法中,我無法訪問EntityManager(並且在這種情況下,持久性不應該是此pojo的任務......如果我在此處加載引用,它會聞起來像不好的設計)。
由於「otherObjReference」是私有的,我也可以使用getters和setter從我的真實參考加載數據。但其他圖層與對象一起工作,所以當他們調用getOtherObjReference()方法時,它們會失敗,因爲它們沒有數據庫連接來加載對象。
哇,我會試試看! – 2009-09-01 17:59:01
請更新,如果它沒有工作,這是非常有趣的討論 – 2009-09-02 05:30:11
@Jorn +1真的很有趣 – 2009-09-02 05:31:43