我有以下两个实体:
个人资料,类别
在个人资料实体中,我有个人资料具有的类别列表
在类别实体中,我具有该类别具有的配置文件列表
生成的表称为 profiles_has_categories, 并具有以下列:
profile_id,category_id
我想查找属于具有以下ID 1、2、3、4的任何类别的所有配置文件
我会在纯SQL中执行以下操作:
SELECT p.* FROM profiles p, profiles_has_categories phc WHERE p.id = phc.profile_id AND phc.category_id IN (1, 2, 3, 4)
但是我不知道如何使用CriteriaBuilder在JPA中构造查询:
CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Profile> criteria = cb.createQuery(Profile.class); Root<Profile> root = criteria.from(Profile.class); // Profile_.categories is a collection of Category objects // categories is collection of Long (category ids) that i want to search in // but is not working criteria.where(root.get(Profile_.categories).in(categories)) List<Profile> results = em.createQuery(criteria).getResultList();
您不想要 获取 ,您想要 加入 :
criteria.where(root.join(Profile_.categories).in(categories))