这个问题可能暴露了我对AspectJ的了解不足,但是无论如何这里都是这样:)

我已经成功地使用Spring Roo将数据库表逆向工程到了一个新的Roo项目中。我希望能够通过不将我的方面“推送”到普通的旧Java类中来保持Roo的双向工程方面。但是,在将值分配给Aspect中定义的成员字段时遇到问题。

例如,我有一个RooDbManaged实体类,我们称它为X,而Roo生成了一个方面:X_Roo_DbManaged。现在,我想为字段“ updateDate”自定义设置器,以便我可以将日期指定为持久性时的当前日期。因此,我将自定义代码放在X类中,如下所示:

ojit_pre

正如我所期望的那样,这导致Roo从方面删除了setter,因为我现在已经在X中对其进行了定义。

这给我一个错误:
字段X.updateDate不可见

如果我将X_Roo_DbManaged方面中的字段的可见性更改为“ public”(我不想这样做),这将解决问题,直到Roo自动重新生成该方面,从而导致错误再次发生。

我的猜测是,我遗漏了如此明显的东西,以至于没有人认为值得发布,因为我通常成功的谷歌搜索未能找到任何解决方案!

我应该补充说,我的解决方法是通过将X_Roo_Controller中的相关方法移到XController中并使用未修改的setter在其中分配日期来自定义相关方法。这似乎是反直观的,因为我真的希望将updateDate设置为当前日期。有趣的是,在updateDate字段上由Roo生成的@Temporal(TemporalType.TIMESTAMP)注释不提供此功能。我真的很想能够通过Roo命令告诉Roo,某些DBRE字段应该具有这种行为,而不必担心什么是“管道”。

最佳答案

我建议您使用@PrePersist@PreUpdate而不是破解设置器

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


否则,您仍然可以将字段本身从X_Roo_DbManaged.aj放入X.java文件,但是您将失去对该字段进行增量反向工程的能力。

关于java - 如何在Spring Roo DBRE生成的实体中自定义 setter ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8765924/

10-12 01:43