我正在使用 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
列表中具有更新的索引。
最佳答案
当你说:
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
log4j.properties
并检查日志。
我必须向关联添加一个显式的@JoinTable
,以便所有操作都能正确级联。
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable
@OrderColumn
private List<Slide> slides = new ArrayList<Slide>();
关于java - 使用 Spring Roo 的 Hibernate OrderColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153318/