java - 带有用于字符串列表的弹簧引导规范的 IN 子句
问题描述
我有一个表Media
,其中有一列“tagList”,其中包含字符串列表。我正在尝试编写搜索查询的规范。
inputTag
如果是并且 tagList 是 ["mentos","bollywood","cinema"],则以下规范工作正常mentos
,但如果 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's Repository Like query method
像这样使用:
将此方法添加到MediaRepository
List<Media> findByTagListContaining(String inputTag);
然后从你的方法中调用它
List<Media> cases = mediaRepo.findByTagListContaining(inputTag);
推荐阅读
- laravel - 向数据表显示年龄 laravel
- android - Android中简单跟踪器的正确方法?
- qt - Qt qml 错误“无法将 [未定义] 分配给 QDeclarativeGeoMapType*”
- python - SpaCy 自定义 NER 模型训练中“丢弃”的含义?
- javascript - 为什么非常简单的 javascript 代码不起作用?
- bash - 使用强制忽略停止并删除 docker 容器
- c# - 有没有办法预加载表格
- python - 如何控制特征的数量【机器学习】?
- xamarin - 背景随机图像不会在 Xamarin Forms 中自动刷新
- node.js - Node 中的同步 I/O 是如何实现的?