有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate OrderColumn和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) 个答案

  1. # 1 楼答案

    当你说:

    It correctly generates the column in the database table to store index and also stores the correct index initially.

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

    log4j.logger.org.hibernate.SQL=DEBUG
    

    查看日志

    我必须向关联中添加一个显式的@JoinTable,这样所有操作都可以正确级联

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