2015-02-10 73 views
1

我即將評估spring roo,而我正在對現有的mysql數據庫方案進行反向工程。除了web mvc json all命令在某些情況下創建的*_Roo_Controller_Json.aj文件引用了不存在的JPA實體獲取方:getId()之外,一切運行良好。這似乎發生在以@Id註釋的字段的名稱與id不同的情況下。奇怪的是,當我通過執行整個roo腳本從頭開始創建應用程序時,並不總是出現這個問題(在下面發佈)。spring-roo爲錯誤的@id屬性名創建json控制器

的JPA實體ITD看起來像:

privileged aspect FrmwrkAuthItem_Roo_Jpa_Entity { 

    declare @type: FrmwrkAuthItem: @Entity; 

    declare @type: FrmwrkAuthItem: @Table(name = "frmwrk_AuthItem"); 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "name", length = 64) 
    private String FrmwrkAuthItem.name; 

    public String FrmwrkAuthItem.getName() { 
     return this.name; 
    } 

    public void FrmwrkAuthItem.setName(String id) { 
     this.name = id; 
    } 
} 

web mvc json all命令創建帶有createFromJson()方法,其中所述非現有吸氣劑getId()被使用(簡化代碼)文件FrmwrkAuthItemController_Roo_Controller_Json.aj。

privileged aspect FrmwrkAuthItemController_Roo_Controller_Json { 

    ... 

    @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json") 
    public ResponseEntity<String> FrmwrkAuthItemController.createFromJson(@RequestBody String json, UriComponentsBuilder uriBuilder) { 
     HttpHeaders headers = new HttpHeaders(); 
     headers.add("Content-Type", "application/json"); 
     try { 
      FrmwrkAuthItem frmwrkAuthItem = FrmwrkAuthItem.fromJsonToFrmwrkAuthItem(json); 
      frmwrkAuthItemService.saveFrmwrkAuthItem(frmwrkAuthItem); 
      RequestMapping a = (RequestMapping) getClass().getAnnotation(RequestMapping.class); 

      /******************************************** 
      * below is the corrupt line of code with frmwrkAuthItem.getId() 
      * frmwrkAuthItem.getName() would be correct! 
      ********************************************/ 
      headers.add("Location",uriBuilder.path(a.value()[0]+"/"+frmwrkAuthItem.getId().toString()).build().toUriString()); 

      return new ResponseEntity<String>(headers, HttpStatus.CREATED); 
     } catch (Exception e) { 
      return new ResponseEntity<String>("{\"ERROR\":"+e.getMessage()+"\"}", headers, HttpStatus.INTERNAL_SERVER_ERROR); 
     } 

     .... 

在Roo腳本來創建應用程序是:

project --topLevelPackage org.myproject 
jpa setup --provider ECLIPSELINK --database MYSQL --databaseName myproject --userName *** --password *** 
addon install bundle --bundleSymbolicName org.springframework.roo.wrapping.mysql-connector-java 

database reverse engineer --schema myproject --service --package ~.domain 
json all 
web mvc setup --package ~.contoller 
web mvc all --package ~.contoller 
web mvc json all 

回答

0

哪個Spring Roo的版本您使用的?

如果這是最新的,我認爲這個問題可能是一個錯誤。你可以在Spring Roo Jira中創建一張關於它的票嗎?

爲了獲得更快的分辨率,您可以包含項目的備份(在刪除roo.log文件的user/passwd後,您可以使用backup Spring-Roo-shell命令)。

問候。

+0

我使用的是最新的Spring Roo版本(1.3.1),但也可能會在版本1.2.5中重現錯誤。我爲這個問題創建了一個Jira票:https://jira.spring.io/browse/ROO-3589 – 2015-02-12 12:34:02

+0

@ Andreas-kohlbecker謝謝! – jmvivo 2015-02-12 13:01:38