簡體   English   中英

Play Framework 2.2-Ebean-ManyToMany OrderBy關系創建日期

[英]Play Framework 2.2 - Ebean - ManyToMany OrderBy relationship creation date

我有以下兩種模型,一種鍛煉和一種鍛煉:

@Entity
public class Workout extends Model {

    @Id
    public Integer id;

    @ManyToMany(cascade = CascadeType.REMOVE)
    public List<Exercises> exercises;

}

@Entity
public class Exercise extends Model {

    @Id
    public Integer id;

    @ManyToMany
    public Workout workout;

}

當我加載鍛煉並嘗試顯示鍛煉時,我希望鍛煉以創建關系(鍛煉與鍛煉之間)的順序顯示。 但是,練習以創建練習的順序顯示。 這是顯示示例(以防萬一):

<ul>
    @workout.exercises.map { exercise =>
    <li>
        @exercise.name    
    </li>
    }
</ul>

我如何能做到這一點任何想法? 我嘗試將@OrderBy添加到屬性定義中,但這不允許我按關系表字段進行排序,這將是理想的選擇(在該表上還添加了created_date字段)。

非常感激!

據我所知,沒有簡單的方法。 只需創建一個getSortedExcercises()即可返回排序后要在模板中使用的列表:

public List<Exercises> getSortedExcercises() {
    List<Exercises> l = new ArrayList(this. exercises);
    Collections.sort(l, new ExercisesComparator());
    return l;
}

就SQL而言,您需要一個order by子句以保證返回的行的順序。 這就是您所看到的“ ...以創建練習的順序顯示”的行為。 ...是特定於您的數據庫約定的實際內容(並且不能跨數據庫移植)。

如果您希望按“創建(鍛煉和鍛煉之間的關系)的順序”對SQL結果進行排序……那么,這的嚴格意義是您需要一個db列來將其存儲在相交表上並通過該列。

現在,默認情況下使用@ManyToMany生成的相交表沒有“創建時”列。 您可以顯式地為相交表建模(從@ManyToMany更改為使用2 @OneToMany等),也可以使用“創建時”列和DB觸發器手動定義相交表以填充該表,然后在按子句排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM