JPA单表存储List与模糊查询_全球微动态
来源:博客园    时间:2023-06-08 12:52:08


(资料图片仅供参考)

当需要在数据库中存储简单的List对象,如List等对象时,如果不想使用OneToMany或者ManyToMany时,可以考虑将List对象转换为JSON并存储。

使用自定义注解:

@Convert(converter = JpaConverterListJso.class)

自定义转换器

public class JpaConverterListJso implements AttributeConverter {    @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即为找到该查询条件。

X 关闭

Copyright   2015-2022 时代太阳能网版权所有   备案号:   联系邮箱: 514 676 113@qq.com