Java 带spring boot规范的IN子句中的字符串列表

Java 带spring boot规范的IN子句中的字符串列表,java,spring-boot,spring-data-jpa,Java,Spring Boot,Spring Data Jpa,我有一个表Media,其中有一列“tagList”,其中包含字符串列表。我正在尝试编写搜索查询的规范 如果inputTag为mentos且标记列表为[“mentos”、“宝莱坞”、“电影院”],则以下规范正常工作,但如果inputTag为“men”,则不返回任何行。如何将isMember替换为in,以便它也与子字符串匹配 代码如下: public class MediaRepositoryService { @PersistenceContext private EntityManager e

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

如果
inputTag
mentos
且标记列表为[“mentos”、“宝莱坞”、“电影院”],则以下规范正常工作,但如果inputTag为“men”,则不返回任何行。如何将isMember替换为in,以便它也与子字符串匹配

代码如下:

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;
            }
        };
    }
}

}
公共类MediaRepositoryService{
@持久上下文
私人实体管理者实体管理者;
@自动连线
私有媒体存储库mediaRepo;
@交易的
公共列表搜索媒体(最终字符串输入){
列表案例=mediaRepo.findAll(MediaSearchSpecificaton.findByCriteria(InputAG));
返回案例;
}
私有静态类MediaSearchSpecification{
私有静态规范findByCriteria(字符串inputTag){
返回新规范(){
/**
* 
*/
私有静态最终长serialVersionUID=1L;
@凌驾
公共谓词toPredicate(根根、标准查询、,
CriteriaBuilder(标准编辑器){
谓词=criteriaBuilder.conjunction();
predicate=criteriaBuilder.and(predicate,criteriaBuilder.isMember(inputTag,root.get(“标记列表”));
返回谓词;
}
};
}
}
}

您可以使用JPA的类似于存储库的查询方法如:

MediaRepository

List<Media> findByTagListContaining(String inputTag);
列出findByTagListContaining(字符串inputTag);
然后从你的方法调用它,就像

List<Media> cases = mediaRepo.findByTagListContaining(inputTag);
List cases=mediaRepo.findByTagListContaining(inputTag);

实际上,以后的inputTag将是List,这就是我使用规范的原因。@Aashish
List findByTagListIn(List inputTag)