JPA 2.0の新機能 CASE文を試す

JPA2.0にはCASE文が使えるようになった。SQLを知っている人ならばみんな触ったことがあるはず。

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main2 {

    public static void main(String[] args) {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2TestPU");
        EntityManager em = emf.createEntityManager();
        String jpql = "select case " +
                "when e.salary > 210000 then concat(e.name , ' この金持ちめ!') " +
                "when e.salary < 180000 then concat(e.name , ' がんがれ!') " +
                "else concat(e.name ,  ' 普通だなっす') " +
                "end " +
                "from Employee e ";

        List<String> result = em.createQuery(jpql ).getResultList();
        for(String e : result){
            System.out.println(e);
        }

        em.close();
        emf.close();

    }

}

構文はSQL標準とまったく同じ模様。

ちなみにconcatは文字列の連結ね。