JPA 关于 list-item 展示顺序问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
StyxS
V2EX    Java

JPA 关于 list-item 展示顺序问题

  •  
  •   StyxS 2020-04-17 14:29:50 +08:00 2790 次点击
    这是一个创建于 2075 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一个文章列表,支持移动某个文章在文章列表里面的顺序
    我的想法是给文章加一个 order 字段,让他插入时自增,检索时按照 order 降序排列
    移动顺序时,就去找目标位置去更改这个 order 字段
    感觉这样问题会比较多 IDENTITTY @generatedValue 后续更改是否会出问题呢?
    像这种场景,最好的设计应该是怎样的
    17 条回复    2020-04-17 21:31:20 +08:00
    wysnylc
        1
    wysnylc  
       2020-04-17 14:35:28 +08:00
    加字段没问题
    StyxS
        2
    StyxS  
    OP
       2020-04-17 14:54:56 +08:00
    @wysnylc 移动顺序的话相当于要重新改多条记录的 order,有更好的方法嘛
    jjianwen68
        3
    jjianwen68  
       2020-04-17 14:58:58 +08:00
    单加一个字段表示排序,不太够吧,置顶,按标签筛选后的排序呢
    StyxS
        4
    StyxS  
    OP
       2020-04-17 15:12:35 +08:00
    @jjianwen68 置顶是独立于排序的这个顺序的,单独弄了个置顶表
    如果按标签筛选排序,用 order 没什么毛病:按标签筛了以后再按 order 排
    这样一想的话,好像限制只能上移下移顺序,就不用处理 order 更改麻烦的问题
    KentY
        5
    KentY  
       2020-04-17 16:33:06 +08:00
    @StyxS 你如果需要顺序这个信息 persist 在数据库里, 当你修改了这个(比如移动了), 肯定这个文章 entry 会被 update.没问题.

    你用 `IDENTITTY @generatedValue` 肯定不行, 因为你要的 order 不是 identity

    你说道:"移动顺序时,就去找目标位置去更改这个 order 字段"
    如果你用自动增量+1 这种方式, 你考虑过没有, 比如:你的 order column:
    1,2,3,4,5 现在你移动 5 到 1 和 2 之间, 你需要 update 多少条记录才变成新的 1,2(原来的 5),3(原来的 2),4(原来的 3),5(原来的 4)
    StyxS
        6
    StyxS  
    OP
       2020-04-17 17:10:03 +08:00
    @KentY 是的,所以我想请教一下正确的这种“展示顺序”应该用什么样的方式来实现
    KentY
        7
    KentY  
       2020-04-17 17:53:54 +08:00   1
    @StyxS 可以设置两个字段, 一个你说的 order, 另一个也是数字, 默认一个相同的就可以,处理当 order 值一样的情况下, 仅对相同 order 的记录进行重排.
    这样有效限制了 update 的记录数. 如果主表特别大, 根据你用的数据库不同, 可以考虑是不是单独出来一个表会在性能以及 lock 上有帮助. 类似:
    order| sub-order
    1,0
    2,0
    3,0
    3,1
    3,2
    StyxS
        8
    StyxS  
    OP
       2020-04-17 18:08:02 +08:00
    @KentY 感谢
    snowydec
        9
    snowydec  
       2020-04-17 18:14:40 +08:00
    @OrderColumn 注解?
    StyxS
        10
    StyxS  
    OP
       2020-04-17 18:31:24 +08:00
    @snowydec 看了下,ordercolumn 好像是应用在成员列表上来维持排序的,但是这个地方文章表好像并不能用上这个吧?
    ConradG
        11
    ConradG  
       2020-04-17 18:39:18 +08:00 via iPhone   1
    order 字段用浮点类型,变更顺序只用前一条和后一条的 order 取平均
    KentY
        12
    KentY  
       2020-04-17 19:15:17 +08:00
    @ConradG 这个要看他什么要求, 当一定情况下, 总会超过定义的精度要求
    Allianzcortex
        13
    Allianzcortex  
       2020-04-17 19:45:48 +08:00
    如果是类似 trello 这样可以上下拖动改变 ticket 的优先级功能,它的实现是每个 ticket 维护一个 after_id 字段,拖动后会 put 一个请求更新字段,然后前端显示时会根据整个 id 排序后再展示
    lybcyd
        14
    lybcyd  
       2020-04-17 20:10:30 +08:00
    用链表的思路做可以吗?这样的话移动顺序只需要更改关联字段就可以了
    /td>
    StyxS
        15
    StyxS  
    OP
       2020-04-17 21:29:59 +08:00
    @ConradG 这个思路很牛逼,学习了
    StyxS
        16
    StyxS  
    OP
       2020-04-17 21:30:51 +08:00
    @Allianzcortex 意思是前端来排序?那分页的话应该怎么办呢
    StyxS
        17
    StyxS  
    OP
       2020-04-17 21:31:20 +08:00
    @lybcyd 链表的话,持久化不太方便吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2853 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 14:30 PVG 22:30 LAX 06:30 JFK 09:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86