使用Spring Roo的Hibernate OrderColumn

时间:2012-02-05 21:42:58

标签: java hibernate spring jpa spring-roo

我正在使用Hibernate的@OrderColumn注释来命令我的数据库中的列表。它正确地生成数据库表中的列以存储索引,并且最初还存储正确的索引。

但是当我尝试更改列表中的排序然后使用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列表中是否有更新的索引。

1 个答案:

答案 0 :(得分:0)

当你说:

  

它正确地生成数据库表中的列以存储索引,并且最初也存储正确的索引。

你确定吗?当我使用类似于您的故事和幻灯片的hibernate映射创建一个示例项目时,没有任何内容被插入到中间表中。确保填充故事和幻灯片之间的联接表。你可以添加

log4j.logger.org.hibernate.SQL=DEBUG

log4j.properties并检查日志。

我必须在关联中添加一个显式@JoinTable,以便所有操作都能正确级联。

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