我有一个表 Media
,其中有一列“tagList”,其中包含字符串列表。我正在尝试编写搜索查询规范。
如果 inputTag
是 mentos
并且 tagList 是 ["mentos","bollywood","cinema"],下面的规范工作正常,但如果 inputTag 是 "men"不返回任何行。如何用 in 替换 isMember 以便它也匹配子字符串。
这是代码:
public class MediaRepositoryService {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private MediaRepository mediaRepo;
@Transactional
public List<Media> searchMedia(final String inputTag) {
List<Media> cases = mediaRepo.findAll(MediaSearchSpecificaton.findByCriteria(inputTag));
return cases;
}
private static class MediaSearchSpecificaton {
private static Specification<Media> findByCriteria(String inputTag) {
return new Specification<Media>() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Predicate toPredicate(Root<Media> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.conjunction();
predicate = criteriaBuilder.and(predicate, criteriaBuilder.isMember(inputTag, root.get("tagList")));
return predicate;
}
};
}
}
}
最佳答案
可以使用JPA的Repository Like查询方式
,比如:
在MediaRepository
中添加这个方法
List<Media> findByTagListContaining(String inputTag);
然后从你的方法中调用它
List<Media> cases = mediaRepo.findByTagListContaining(inputTag);
关于java - 带有字符串列表的 spring boot 规范的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367634/