2014-11-04 58 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