2012-01-06 5 views
1

この質問はAspectJのの知識の私の不足を公開するが、ここでは、とにかく行くこと:)Spring Roo DBRE生成エンティティでセッタをカスタマイズするにはどうすればよいですか?

私は逆に新しいRooのプロジェクトにテーブルの束をエンジニアデータベースへのSpring Rooのを正常に使用しています。 Rooのラウンドトリップエンジニアリングの面を、古いアスペクトのJavaクラスに自分の側面を「押し込め」ないようにしたいと考えています。ただし、Aspectで定義されているメンバフィールドに値を割り当てる際に問題が発生しています。

例えば、私はRooDbManagedエンティティクラスを持っています。それをXと呼びましょう.RooはX_Roo_DbManagedというアスペクトを生成しています。今、私は永続性の時に現在の日付を割り当てることができるように、フィールド 'updateDate'のセッターをカスタマイズしたいと思います。だから、私はクラスXで私のカスタムコードを配置している次のように:私は今、X.

でそれを定義したので、

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

これは、私が期待するよう、側面からセッターを削除するにはルーを引き起こし

これは私にエラーを与える:私は「公共」(私はむしろないと思います何か)にX_Roo_DbManaged面でフィールドの可視性を変更した場合 フィールドX.updateDateは

表示されていませんこれはRoo automaticaまで問題を解決しますllyはエラーを再発させる原因を再生成します。

私の推測では、普段成功しているグーグルがこの解決策を見つけるのに失敗したので、誰もそれが価値のある投稿だと思っていないほど明らかに欠けているということです。

私の回避策は、X_Roo_Controllerから関連するメソッドをXControllerに移動し、未変更のセッターを使用して日付を割り当てることによってカスタマイズすることです。これは、直感的に反しているようですが、updateDateが常に現在の日付になることが本当に好きです。興味深いことに、updateDateフィールドのRooによって生成された@Temporal(TemporalType.TIMESTAMP)注釈は、この機能を提供しません。私は本当にRooに、特定のDBREフィールドがこの動作をし、本質的に「配管」であることを心配する必要がないことをRooに伝えることができるようにしたいと思います。

答えて

2

は、私はあなたがそうでなければ、あなたはまだX.javaファイルにX_Roo_DbManaged.ajからフィールド自体を置くことができる代わりに、セッター

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

をハッキングの @PrePersistと​​を使用することをお勧めしますが、インクリメンタルにそのフィールドをリバースエンジニアリングする能力を失うことになります。

0

フィールドupdateDateをX.javaに移動して表示することができます。

関連する問題