2012-02-05 102 views
2

我使用Hibernate的@OrderColumn註釋在我的數據庫中排序。它正確地生成數據庫表中的列以存儲索引,並且還最初存儲正確的索引。Hibernate OrderColumn with Spring Roo

但是,當我試圖改變在列表中的排序,然後使用Spring Roo的merge()方法來更新數據庫,順序不會改變。

這裏是我的實體代碼:

@RooJavaBean 
@RooToString 
@RooEntity 
public class Story { 

    @ManyToMany(cascade = CascadeType.ALL) 
    @OrderColumn 
    private List<Slide> slides = new ArrayList<Slide>(); 

    @ManyToOne 
    private Question question; 

    private String title; 

} 

這裏是一個調用merge功能的更新方法:

@RequestMapping(method = RequestMethod.PUT) 
public String StoryController.update(@Valid Story story, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) { 
    if (bindingResult.hasErrors()) { 
     uiModel.addAttribute("story", story); 
     return "storys/update"; 
    } 
    uiModel.asMap().clear(); 
    story.merge(); 
    return "redirect:/storys/" + encodeUrlPathSegment(story.getId().toString(), httpServletRequest); 
} 

我已經使用了story對象具有更新索引調試檢查slides列表。

回答

0

當你說:

它正確生成數據庫表來存儲索引中的列,並最初存儲正確的索引。

您確定嗎?當我使用類似於故事和幻燈片的Hibernate映射創建示例項目時,沒有任何內容插入到中間表中。確保您的故事和幻燈片之間的連接表正在填充。您可以添加

log4j.logger.org.hibernate.SQL=DEBUG 

log4j.properties並檢查日誌。

我不得不將明確的@JoinTable添加到關聯中,以便所有操作都正確級聯。

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable 
@OrderColumn 
private List<Slide> slides = new ArrayList<Slide>();