2012-01-06 92 views
1

這個問題可能會暴露我缺乏的AspectJ的知識,但在這裏不用反正:)如何在Spring Roo DBRE生成的實體中定製setter?

我已經成功地使用Spring Roo的到數據庫的反向工程了一堆表格到一個新的Roo的項目。我希望能夠保持Roo的往返工程方面不會將我的方面「推」到普通的舊Java類中。但是,我正在遇到將值分配給Aspect中定義的成員字段的問題。

例如,我有一個RooDbManaged實體類,我們稱之爲X,Roo生成了一個方面:X_Roo_DbManaged。現在,我想爲字段'updateDate'定製一個setter,以便我可以在持久化時將日期指定爲當前日期。所以,我把我的自定義代碼的類X如下:

public void setUpdateDate(Date updateDate) { 
    this.updateDate = new Date(); 
} 

這使得袋鼠從縱橫刪除二傳手,因爲我所期望的,因爲我現在已經在十

定義它

這給了我一個錯誤: 如果我改變字段的可見性在X_Roo_DbManaged方面「公」(的東西,我寧願不做)領域X.updateDate是不可見的

,這解決了這個問題,直到Roo automatica lly重新生成導致錯誤再次發生的方面。

我的猜測是我錯過了一些非常明顯的事情,沒有人認爲它值得發佈,因爲我通常成功的谷歌搜索未能找到任何解決方案!

我應該補充一點,我的解決方法是通過將X_Roo_Controller移動到XController中並使用未修改的setter指定日期來自定義相關方法。這似乎是違反直覺的,因爲我真的很希望updateDate始終是當前設置的日期。有趣的是,Roo生成的@Temporal(TemporalType.TIMESTAMP)註釋在updateDate字段不提供此功能。我真的很希望能夠通過Roo命令告訴Roo某些DBRE字段應該具有這種行爲,而不必擔心本質上「管道」的含義。

回答

2

我建議你使用@PrePersist和​​,而不是黑客的制定者

public class X { 
    @PreUpdate 
    public void beforeSaving() { 
     this.setUpdateDate(new Date()); 
    } 
} 

否則,你仍然可以把場本身X_Roo_DbManaged.ajX.java文件,但你將失去以增量逆向工程這一領域的能力。

0

您可以將字段updateDate移動到X.java中以使其可見。