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 视为一个字符串,不再有不兼容的类型。
我在列表字段上使用 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 视为一个字符串,不再有不兼容的类型。