2012-02-05 16 views
2

私はHibernateの@OrderColumn注釈を使用してデータベース内のリストを注文しています。インデックスを格納するデータベーステーブルの列を正しく生成し、正しいインデックスを最初に格納します。Spring RooでHibernate OrderColumn

しかし、リストの順序を変更してから、Spring Rooのmerge()メソッドを使用してデータベースを更新しようとすると、順序は変更されません。ここで

は私のエンティティのためのコードです:私はstoryオブジェクトがで更新インデックスを持つデバッグを使用してチェックしている

@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); 
} 

:ここ

@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関数を呼び出す更新方法でありますslidesリスト

答えて

0

あなたが言う:

それは正しくインデックスを格納するデータベーステーブルの列を生成しても、最初は正しいインデックスを格納します。

あなたはそのことについてよろしいですか?あなたのStoriesとSlidesに似たハイバネートマッピングを持つサンプルプロジェクトを作成したとき、何も中間テーブルに挿入されていませんでした。ストーリーとスライドの間の結合テーブルがまったく占められていることを確認してください。あなたはlog4j.properties

log4j.logger.org.hibernate.SQL=DEBUG 

を追加し、ログを調べることができます。

すべての操作が正しくカスケードされるように、明示的に@JoinTableをアソシエーションに追加する必要がありました。

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable 
@OrderColumn 
private List<Slide> slides = new ArrayList<Slide>(); 
関連する問題