spring数据规范过滤

xxhby3vn  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(275)

假设我有一个带列的表 categories 其中值由逗号分隔。我制作了一个自定义转换器,它从数据库中接受原始字符串并返回 Set<String> . 这是实体

@Entity
public MyEntity {
    @Convert(converter = StringToSetConverter.class)
    private Set<String> categories;
}

现在我想按类别过滤实体。逻辑告诉我我不能使用 in predicate ,因为数据库中的实际值是原始字符串。
也许这种方法是可以接受的

myEntityRepository.findAll((root, query, criteriaBuilder) -> 
  criteriaBuilder.like(
    criteriaBuilder.lower(root.get("categories").as(String.class))
    pattern.toLowerCase()
  )
);

也许有更优雅的方法来解决这个问题?

d5vmydt9

d5vmydt91#

解决办法很好。根据您使用的数据库,您可以在数据库上使用数组类型,而不是使用array contains函数来实现这些检查,但是如果您现在拥有的功能适用于您,则无需更改。

相关问题