使用休眠设置排序顺序

时间:2014-11-04 16:45:15

标签: hibernate hql

我正在开发Spring-MVC。我使用hibernate作为ORM工具。有一个表有一个名为' NoteOrder'的列。因此,对于任何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;

    }

1 个答案:

答案 0 :(得分: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的文档

  

指定用于维护a的持久顺序的列   名单。持久性提供程序负责维护   检索时和数据库中的订单。持久性提供程序是   负责在刷新到数据库时更新排序   反映影响列表的任何插入,删除或重新排序。

在这种情况下,@OrderColumn将在Notes表中创建名为noteorder的列,并且它将具有与注释列表中相同的索引,因此每次重新排序都会影响noteorder。您的查询现在应该可以使用。

希望它有所帮助。