2010-05-25 15 views
1

我試圖在JPA中保存一個SystemUser實體。我也想保存某些東西,比如誰創建了SystemUser,誰最後修改了系統用戶。JPA中的自引用對象

@ManyToOne(targetEntity = SystemUser.class) 
@JoinColumn 
private SystemUser userWhoCreated; 

@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(iso=ISO.DATE_TIME) 
private Date timeCreated; 

@ManyToOne(targetEntity = SystemUser.class) 
@JoinColumn 
private SystemUser userWhoLastModified; 

@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(iso=ISO.DATE_TIME) 
private Date timeLastModified; 

我也想確保這些值在持續時不爲空。因此,如果我使用NotNull JPA註釋,這很容易解決(並參考另一個實體)

問題描述很簡單,如果我要使用DataLoader類來在系統中沒有rootuser,則無法保存rootuser堅持JPA實體。以後的每個用戶都可以輕鬆地使用userWhoModified作爲「systemuser」,但systemuser自身不能添加到此方案中。

有沒有辦法堅持這第一個系統用戶(我在用SQL思考)。這是一個典型的bootstrap(雞或蛋)問題,我想。

+2

不應該是社區維基 – Bozho 2010-05-25 15:49:57

+2

@Bozho LOL,我第一次看到反社區wiki警察:) – 2010-05-25 15:53:39

回答

1

您試過rootUser.setUserWhoLastModified(rootUser)

+0

是的,我實際上試過它,它存儲時工作。我使用ROOs toString() 因此rootUsers字符串將有一個線,其中有rooUsers字符串(並且它發瘋了)刪除解決問題,但我仍然不知道是否有一個更清潔的解決方案(這意味着我不得不讓人們在解決方案中使用這種特殊類型的toString方法。我看到的另一個解決方案是使用LAZY和bytecodeinstrumentation,至今我還沒有發現一種解決方案 – geoaxis 2010-05-27 08:06:25