最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

JPA单表存储List与模糊查询

来源:博客园


【资料图】

当需要在数据库中存储简单的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即为找到该查询条件。

关键词: