繁体   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