JPA单表存储List与模糊查询
当需要在数据库中存储简单的List对象,如List<String>等对象时,如果不想使用OneToMany或者ManyToMany时,可以考虑将List对象转换为JSON并存储。
使用自定义注解:
@Convert(converter = JpaConverterListJso.class)
自定义转换器
public class JpaConverterListJso implements AttributeConverter<Object, String> {
@Override
public String convertToDatabaseColumn(Object o) {
return JSON.toJSONString(o);
}
@Override
public Object convertToEntityAttribute(String s) {
return JSON.parseArray(s);
}
}
这样即存储时将简单List对象转换为JSON字符串存入数据库,又能将JSON字符串转为简单List对象取出
但是使用以上功能后,会使得JPA的模糊查询使用Like查询出现问题,该字段传入参数时会被JPA自动加上双引号。这是由Converter导致的。
为了解决模糊的问题。可以使用如下操作:
expressions.add(criteriaBuilder.greaterThan(criteriaBuilder.locate(root.get("station"), "\"" + station + "\""), 0));
该操作中,criteriaBuilder.locate将需要查询的条件传入取得该字段中查询条件的坐标,如果查询到坐标,即返回大于等于1的坐标位置。然后使用criteriaBuilder.greaterThan判断坐标是否大于0,如果大于0即为找到该查询条件。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步