【问题标题】:Best way to implement an "reorderable" Entity实现“可重新排序”实体的最佳方式
【发布时间】:2015-07-06 10:17:22
【问题描述】:

我有一个或多或少作为列表显示给用户的实体列表。现在用户不仅可以添加或删除实体,还可以对现有实体进行重新排序(使用典型的“向上”、“向下”、“向上”、“向下”操作)。

但是实现这种行为的最佳方式是什么?当然,我可以在服务层“手动”编写所有需要的操作,但是这个功能似乎是一个普遍的需求,所以也许已经有某种标准的解决方案了?

【问题讨论】:

  • 可在哪里重新订购?在另一个实体?因为您将其标记为 JPA,所以我假设在另一个实体中。
  • 没有。这种类型的实体必须是可排序的。问题是用户可以随时更改排序顺序(“现在这个实体需要在列表中上升”)。这就是我所说的“可重新排序”。
  • 因此,如果您的意思不是“从数据库中检索”,那么只需在您的 JPQL 查询中设置 ORDER BY 子句。如果您的意思是在检索数据后将它们放入 SortedSet 并定义一个比较器...

标签: java hibernate jpa hibernate-mapping spring-data-jpa


【解决方案1】:

最合适的双向收藏,是ordered List

@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent", orphanRemoval = true)
@OrderColumn("order_id")
private List<Child> children = new ArrayList<>();

order_id 列将用于在检索时对元素进行排序,当您更改元素顺序时,Hibernate 将发出适当的更新以根据当前元素索引设置 order_id 列。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2016-06-14
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2018-03-08
相关资源
最近更新 更多