java - 带有字符串列表的 spring boot 规范的 IN 子句

标签 java spring-boot spring-data-jpa

我有一个表 Media,其中有一列“tagList”,其中包含字符串列表。我正在尝试编写搜索查询规范。

如果 inputTagmentos 并且 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/

相关文章:

java - 如何实现谷歌OAuth?

spring-boot - 如何保护 websocket 应用程序 [Spring boot + STOMP]

java - 如何使用带有共享字段的 Spring Data JPA 创建自定义查询?

mysql - 在控制台中从 Spring JPA 查询与原始 SQL 获取不同的结果

java - 为什么即使提供了初始容量,我们也不能在将元素添加到第 (n-1) 个索引之前将元素添加到列表中的第 n 个索引

java - 是否可以在 Spring 启动时将Web套接字与rest api一起使用?

java - 使用 spring-data 进行延迟评估

java - Spring Boot 数据 - 未找到属性注册

spring-boot - Spring Boot 2.0,运行时读取最大请求大小,最大文件大小配置值

java - SpringBoot 2.1.0 尝试集成数据库访问时抛出 ClassNotFoundException