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