假设我有一个带列的表 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()
)
);
也许有更优雅的方法来解决这个问题?
1条答案
按热度按时间d5vmydt91#
解决办法很好。根据您使用的数据库,您可以在数据库上使用数组类型,而不是使用array contains函数来实现这些检查,但是如果您现在拥有的功能适用于您,则无需更改。