我正在开发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;
}
答案 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
。您的查询现在应该可以使用。
希望它有所帮助。