0

コミック オブジェクトは多くの Chapter オブジェクトを持つことができます。

私はComicsクラスでこれを持っています:

@OneToMany(targetEntity=Chapter.class, mappedBy="comics", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
private List<Chapter> chapters = null;

コミックにチャプターを追加する私の方法:

public Chapter addChapter(Chapter chapter, String key) {
    EntityManager em = EMF.get().createEntityManager();
    EntityTransaction tx = null;
    Comics comics = null;
    try{
        tx = em.getTransaction();
        tx.begin();

        comics = em.find(Comics.class, KeyFactory.stringToKey(key));
        chapter.setPages( new LinkedList<Page>() );

        comics.getChapters().add(chapter);

        tx.commit();
    }catch(Exception ex){
        ex.printStackTrace();
        if(tx != null && tx.isActive())
            tx.rollback();
    } finally{
        em.close();
    }

    return chapter;
}

漫画を読むための私の方法:

public Comics read(String key) throws IllegalAccessException, InvocationTargetException{
    EntityManager em = EMF.get().createEntityManager();
    Comics comics = new Comics();
    try{
        Comics emComics = em.find(Comics.class, KeyFactory.stringToKey(key));
        BeanUtils.copyProperties(comics, emComics);
        comics.setChapters(new LinkedList<Chapter> (emComics.getChapters()));

    }finally{
        em.close();
    }
    return comics;
}

new を保存したときComics、次のものもあります。

comics.setChapters( new LinkedList<Chapter>() );

問題は、readメソッドが の予期しない順序を返すことですchapters。順番に表示するための最良のアプローチは何chaptersですか?

4

1 に答える 1

1

@OrderByアノテーションを使用できます。

例えば:

@OneToMany(targetEntity=Chapter.class, mappedBy="comics", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
@OrderBy("chapterNumber")
private List<Chapter> chapters = null;

これは、比較可能なchapterNumberフィールドがあることを前提としています

于 2012-09-21T02:53:39.830 に答える