Playframework 2.0 当

Playframework 2.0 当,playframework-2.0,ebean,Playframework 2.0,Ebean,使用Ebean finder时,是否可以提供如下所示的order by语句: ORDER BY CASE WHEN a = 'FOO' THEN 1 WHEN a = 'BAR' THEN 2 ELSE 99 END 这样的订购是可能的。我们所要做的就是添加瞬态字段,并用带有适当参数的@Formula对其进行注释 因此,模型类应该如下所示: @Entity public class A extends Model { public A

使用Ebean finder时,是否可以提供如下所示的order by语句:

ORDER BY 
   CASE
      WHEN a = 'FOO' THEN 1
      WHEN a = 'BAR' THEN 2
      ELSE 99
   END

这样的订购是可能的。我们所要做的就是添加瞬态字段,并用带有适当参数的@Formula对其进行注释

因此,模型类应该如下所示:

@Entity
public class A extends Model {

    public A(Long aId, String aA) {
        id = aId;
        a = aA;
    }

    @Id
    public Long id;

    @Required
    public String a;

    @Transient
    @Formula(select = "(case when ${ta}.a = 'FOO' then 1 when a = 'BAR' THEN 2 else 99 end)")
    Integer index;

    public static Finder<Long,A> find = new Finder<Long,A>(Long.class, A.class);
}
@实体
公共A类扩展模型{
公共A(长辅助线、线aA){
id=援助;
a=aA;
}
@身份证
公共长id;
@必需的
公共字符串a;
@短暂的
@公式(select=“(当${ta}.a='FOO'时为case,当a='BAR'时为1,当a='BAR'时为2,则为end)”)
整数指数;
公共静态查找器find=新查找器(Long.class,A.class);
}
通过这种方式,我们创建了虚拟列“index”,并可以根据它进行排序

以下是示例性试验方法:

@Test
public void aTest() {
    FakeApplication app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
    Helpers.start(app);

    A a1 = new A(1L, "BAR");
    A a2 = new A(2L, "XYZ");
    A a3 = new A(3L, "FOO");
    A a4 = new A(4L, "AAA");
    A a5 = new A(5L, "FOO");
    A a6 = new A(6L, "BAR");

    a1.save();
    a2.save();
    a3.save();
    a4.save();
    a5.save();
    a6.save();

    List<A> list = Ebean.find(A.class).orderBy("index").findList(); 
    for(A fa: list) {
        System.out.println("fa.id:"+fa.id+" fa.a:"+fa.a);
    }

    System.out.println("-------------------------");

    List<A> list1 = A.find.orderBy("index").findList();     
    for(A fa: list1) {
        System.out.println("fa.id:"+fa.id+" fa.a:"+fa.a);
    }
}
@测试
公共无效测试(){
FakeApplication app=Helpers.FakeApplication(Helpers.inMemoryDatabase());
Helpers.start(应用程序);
a1=新的A(1L,“BAR”);
a2=新的A(2L,“XYZ”);
a3=新的A(3L,“FOO”);
a4=新A(4L,“AAA”);
a5=新的A(5L,“FOO”);
a6=新的A(6L,“巴”);
a1.保存();
a2.保存();
a3.保存();
a4.保存();
a5.保存();
a6.保存();
List List=Ebean.find(A.class).orderBy(“index”).findList();
对于(fa:列表){
系统输出打印项次(“fa.id:+fa.id+”fa.a:+fa.a”);
}
System.out.println(“---------------------------”);
List list1=A.find.orderBy(“index”).findList();
对于(A fa:list1){
系统输出打印项次(“fa.id:+fa.id+”fa.a:+fa.a”);
}
}