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