Hibernate 如何使用spring数据jpa按集合属性查找所有匹配项?
我有一个实体的集合属性。我需要在数据库中找到包含此字符串的所有记录。喜欢完全匹配的“喜欢(%KEYWORD%)” 我试过不同的方法 此代码工作正常: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);
@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);