[英]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.