JPA 规范,再次使用 List<String>

JPA Specification, using like againt List<String>

我在列表字段上使用 like 时遇到问题。

实体class:

@Entity
public class ToSearch{

    @Convert(converter = CollectionConverter.class)
    private List<String> myList;

    //... OTHER FIELDS ...

}

转换器class:

public class CollectionConverter implements AttributeConverter<List<Object>, String> {

    private ObjectMapper objectMapper = new ObjectMapper();

    @Override
    public String convertToDatabaseColumn(List<Object> object) {
        try {
            return objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            return "";
        }
    }

    @Override
    public List<Object> convertToEntityAttribute(String data) {
        try {
            return objectMapper.readValue(data, new TypeReference<List<Object>>() {
            });
        } catch (Exception e) {
            return null;
        }
    }
}

还有一个简单的说明:

predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("myList")), "%"+ term + "%")));

我的目标很简单,只需搜索一个术语字符串,将其视为一个简单的字符串。

事实上,在数据库中,myList 是一个 String 并且像搜索一样工作正常。

但是...当我执行这个...

Parameter value [%BLA%] did not match expected type [java.util.List (n/a)]

有什么想法吗?

最后,如错误所述,我需要将正在搜索的字段更改为兼容类型的数据。

criteriaBuilder.like(criteriaBuilder.lower(root.get("myList").as(String.class)), "%" + term + "%")));

这样做,JPA 将 myList 视为一个字符串,不再有不兼容的类型。