Hibernate 如何使用spring数据jpa按集合属性查找所有匹配项?

Hibernate 如何使用spring数据jpa按集合属性查找所有匹配项?,hibernate,spring-boot,spring-data-jpa,spring-data,Hibernate,Spring Boot,Spring Data Jpa,Spring Data,我有一个实体的集合属性。我需要在数据库中找到包含此字符串的所有记录。喜欢完全匹配的“喜欢(%KEYWORD%)” 我试过不同的方法 此代码工作正常: @Query(value = "SELECT * FROM cms_article WHERE category_ids LIKE %?1%", nativeQuery = true) Page<Article> findByCategoryIdsLike(String categoryId, Pageable pageable);

我有一个实体的集合属性。我需要在数据库中找到包含此字符串的所有记录。喜欢完全匹配的“喜欢(%KEYWORD%)”

我试过不同的方法

此代码工作正常:

@Query(value = "SELECT * FROM cms_article WHERE category_ids LIKE %?1%", nativeQuery = true)
Page<Article> findByCategoryIdsLike(String categoryId, Pageable pageable);
第条实体:


@资料
@实体
@表(name=“cms\U文章”)
@org.hibernate.annotations.Table(appliesTo=“cms\u article”,comment=“article information Table”)
@EqualsAndHashCode(callSuper=true)
公共类文章扩展了BaseEntity{
@Column(columnDefinition=“varchar(120)注释‘文章标题’)
私有字符串标题;
@Column(columnDefinition=“varchar(24)注释‘文章作者’)
私有字符串作者;
@Convert(converter=JpaJsonConverter.class)
@Column(name=“cover\u url”,columnDefinition=“varchar(255)注释‘文章封面’)
私人名单;
@列(columnDefinition=“mediumtext注释‘文章内容’”)
私有字符串内容;
@Convert(converter=JpaJsonConverter.class)
@Column(name=“category\u id”,columnDefinition=“varchar(255)注释‘物品类别id’)
私有列表类别;
}
对象到json字符串的自定义属性转换器:


公共类JpaJsonConverter实现AttributeConverter{
@凌驾
公共字符串convertToDatabaseColumn(对象){
返回JSON.toJSONString(对象);
}
@凌驾
公共对象convertToEntityAttribute(字符串dbData){
返回JSON.parse(dbData);
}
}
JPA存储库:


公共接口ArticleRepository扩展了JpaRepository

尝试findByCategoryContainingIgnoreCase方法,而不是findByCategoryIdsLike方法

@Query("Select cmsa from cms_article cmsa where cmsa.category_ids LIKE  %?1%")
Page<Article> findByCategoryContainingIgnoreCase(String categoryId);
@Query(“从cms文章cmsa中选择cmsa,其中cmsa.category\u id像%?1%”)
页面findByCategoryContainingIgnoreCase(字符串类别ID);
如果没有@Query,请在下面尝试

Page<Article> findByCategoryIgnoreCaseContaining(String categoryId);
Page findByCategoryIgnoreCaseContaining(字符串categoryId);
试着这样做:

Page<Article> findByCategoryIdsContainingIgnoreCase(String categoryId, Pageable p);

试试这个

Page<Article> findByCategoryContaining(String categoryId);
页面

检查上述文件中的内容


表3。方法名称中支持的关键字

我仍然遇到此错误:
未知集合表达式类型[org.hibernate.query.criteria.internal.path.SingularAttributePath]
第一种方法无法获得正确的记录,第二种方法仍然出现相同的错误。
Page<Article> findByCategoryIdsContainingIgnoreCase(String categoryId, Pageable p);
articleId | categoryId
    1     |     1
    1     |     2    
    2     |     1
    2     |     3
Page<Article> findByCategoryContaining(String categoryId);