2012-02-05 103 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>();