代码之家  ›  专栏  ›  技术社区  ›  Jamie White

@OrderColumn无法按插入顺序对arraylist排序

  •  0
  • Jamie White  · 技术社区  · 6 年前

    需要ArrayList按对象保存到数据库的顺序保存对象。使用@OrderColumn来实现这一点,但由于某种原因,它无法按从早到晚排序。

    Watching.class
    
      @ManyToMany(cascade = CascadeType.ALL,
          targetEntity = Ticker.class,
          fetch = FetchType.LAZY)
      @JoinTable(name="watching_ticker",
          joinColumns = @JoinColumn(name="watching_id"),
          inverseJoinColumns= @JoinColumn(name="ticker_id"))
      @OrderBy("id desc")
      private List<Ticker> tickers;
    
    ...
    
    Ticker.class
      @JsonIgnore
        @ManyToMany
        @JoinTable(name ="watching_ticker",
            joinColumns = @JoinColumn(name ="ticker_id"),
            inverseJoinColumns = @JoinColumn(name = "watching_id"))
      protected Set<Watching> watchings;
    
    ..
    
    Tester
    
    Account account;
    AccountService accountService;
        Ticker ticker;
        Ticker tickerTwo;
    
      @Before
      public void setUp() throws Exception {
        account = ...
            ticker = ...;
          tickerTwo = ...;
        ....
        }
    
      @Test
      public void testSave() {
    
        Watching watching = account.getWatching();
        watching.getTickers().add(ticker);
        watching.getTickers().add(tickerTwo);
    
    
        Watching saved = accountService.save(account).getWatching();
    
    
        Ticker one = saved.getTickers().get(0);
        int size = saved.getTickers().size();
        assertEquals(2, size);
        Assert.assertEquals(one, tickerTwo); <-- fails
      }
    
    0 回复  |  直到 6 年前
        1
  •  0
  •   Peter Å ály    6 年前

    改用@OrderBy。@OrderColumn按ID以外的不可见列对记录进行排序。

    订单列作为实体状态的一部分不可见,或者 可嵌入类。

    https://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html