JPA 1.0ではINにコレクションが使えなかった。何のためのO/Rマッパなのかわからなかったが、仕方がないので自前でそういうライブラリを用意したところは多いと思う。
それももう終わり。コレクション型をわたせるようになった。やっと。
import java.util.Arrays; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import jpa2test.entity.Employee; public class Main3 { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPA2TestPU"); EntityManager em = emf.createEntityManager(); String jpql = "select e " + "from Employee e " + "where e.id in :id"; List<Long> idParam = Arrays.asList(1l,3l,5l); List<Employee> result = em.createQuery(jpql ).setParameter("id", idParam).getResultList(); for(Employee e : result){ System.out.printf("%d:%s - %tF%n" ,e.getId() ,e.getName() , e.getEntdate()); } em.close(); emf.close(); } }
ログは以下のようになる。
[EL Fine]: 2009-11-11 21:39:35.078--ServerSession(8116722) --Connection(26453615)--Thread(Thread[main,5,main]) --SELECT ID, ENTDATE, NAME, SALARY FROM EMPLOYEE WHERE (ID IN (?,?,?)) bind => [1, 3, 5] 1:ほげ0 - 1999-12-31 3:ほげ2 - 2000-03-02 5:ほげ4 - 2000-05-04
INは割とよく使われると思うのでこれはありがたい。