JPAでのSQLのIn句指定
Entityクラスに、@idのアノテーション(EmbeddedId)がある場合のSQLでのIn句指定
Entity クラス
@Entity
@Table(name = "TableName1")
@NamedQuery(name = "Entity.findAll", query = "SELECT t FROM TableName1 t")
public class Entity implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private EntityPK id;}
エンティティのPKクラス
@Embeddable
public class EntityPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "CODE")
private String code;
@Column(name = "CODE2")
private long code2;public EntityPK() {
}}
SQL生成
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Entity> criteriaQuery = cb.createQuery(Entity.class); Root<Entity> entity = criteriaQuery.from(Entity.class); //idフィールドでidフィールドのクラスの中にある codeフィールドを指定する criteriaQuery.select(entity).where(entity.get("id").get("code").in(Array.asList(1,2,3)); List<Entity> list = entityManager.createQuery(criteriaQuery).getResultList(); System.out.println("list size=" + list.size());