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即为找到该查询条件。

posted @ 2023-06-08 10:58  leayun  阅读(296)  评论(0编辑  收藏  举报