代码之家  ›  专栏  ›  技术社区  ›  Neeraj Jain

Spring JPA:@OrderBy在使用saveAndFlush时不起作用

  •  0
  • Neeraj Jain  · 技术社区  · 5 年前

    我在用 @OrderBy 子句在我的bean上当我从持久层获取这个对象时,这很好,但是当我试图使用

    persistedObject = saveAndFlush(MyCustomObject);
    

    结果 persistedObject 未按照 @勤务员 条款

    代码片段:

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinColumn(name = "COLLECTION_ID")
    @OrderBy("order ASC")
    private Set<MySections> sections;
    
    class MySections {
      // Some Properties
        @Column(name = "SEQ_NO")
        private Integer order;
    }
    

    与存储库相关的代码

    // this brings sections ordered by order property
    collectionRepository.findById("123"); 
    
    
    // Sections in persistedCollection are not ordered
    persistedCollection = collectionRepository.saveAndFlush(collection); 
    
    
    1 回复  |  直到 4 年前
        1
  •  2
  •   Andronicus    5 年前

    因为 @OrderBy 不直接在数据库中具体化订单。它获取数据并在内存中执行排序。为了实现目标,你必须使用你所描述的 @OrderColumn .它保持 持久的 数据库中行的顺序。

    还有一个建议——只使用 select 查询不是检查排序的好选项,因为数据库不能保证结果的排序。