2014-11-04 85 views
0

我正在使用Spring-MVC。我正在使用休眠作爲ORM工具。有一個名爲'NoteOrder'的列。 SO對於任何CRUD操作,數據庫中的數據順序由NoteOrder管理。使用休眠設置排序順序

問題:在任何CRUD操作後,我想重置從1開始的筆記本並遞增,直到該表結束。

如何使用Hibernate查詢來實現這一點。我搜索了類似的東西,找不到任何東西。我張貼以下代碼以供參考。該函數返回一個列表。

@Override 
    public List<Notes> listNotesBySectionId(int sectionid, Person person) { 
     int personid = person.getId(); 
     if(session == null) { 
      session = this.sessionFactory.openSession(); 
     }else { 
      session = this.sessionFactory.getCurrentSession(); 
     } 
     Query query = session.createQuery("from Notes as n where n.person1.id=:id and n.sectionid=:sectionid order by n.noteorder"); 
     query.setParameter("id",personid); 
     query.setParameter("sectionid",sectionid); 
     List<Notes> notesList = query.list(); // this list has the noteorder by asking notelist.getNoteOrder(); 
     System.out.println("Notes per sectionid per person are" + notesList); 
     return notesList; 

    } 
+0

您想維護NoteOrder列的備註訂單嗎?在每一個CRUD(沒有讀取,我猜)後你想要重置/更新NoteOrder? – 2014-11-04 19:24:29

+0

未讀取後...抱歉...只有在創建,更新,刪除後。休息你問的是正確的。 – 2014-11-04 19:34:59

+0

當你添加一些注意到它將結束(與最高的NoteOrder)?當你移除Note時,每一個索引較高的Note都應該更新(減1)? – 2014-11-04 19:43:21

回答

0

您可以使用@OrderColumn進行註解,例如條目;

@Entity 
public class Person implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="id") 
    private int id; 

    @Column(name="name") 
    private String name; 

    @OneToMany(cascade=CascadeType.ALL) 
    @OrderColumn(name="noteorder") 
    private List<Notes> notes; 

... 

從技術文檔有關OrderColumn

指定用於維持 列表的順序持續一列。持久性提供程序負責維護檢索時和數據庫中的 訂單。持久化提供程序是 ,負責將刷新到數據庫的排序更新爲 ,反映影響列表的任何插入,刪除或重新排序。

在這種情況下@OrderColumn將在Notes表中創建名稱爲noteorder列,它將具有相同的指數,因爲他們在筆記列表,所以每一個重新排序將影響noteorder。你的查詢現在應該可以工作

希望它有幫助。

+0

這將排序整個筆記數據庫。正如你可以從我的NotesDaoImpl看到的......我只是以給定的sectionid爲每個人取回列表。輸出格式爲list。是否可以對該列表進行排序?我可以通過noteslist.getNoteorder()檢索noteorder。 – 2014-11-05 07:24:23

+0

這將按人排序。所以每個Person對象都會有自己的順序。 – 2014-11-05 09:10:42