当前版本
- java 1.8
- springboot 2.0.3.RELEASE
- mysql 8.0.16
实体添加自定义的注解 @Convert(converter = Helper.Jpa2List.class)
// ENTITY EXAM
import com.alibaba.fastjson.JSONObject;
import com.emis.utils.BaseEntity2;
import com.emis.utils.Helper;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Getter
@Setter
@Entity
@org.hibernate.annotations.Table(appliesTo = "exam", comment = "考试")
public class Exam extends BaseEntity2 {
@Convert(converter = Helper.Jpa2List.class)
@Column(nullable=false,columnDefinition = "varchar(255) default '[]' comment '定位点'")
public List<Double[]> benchmarkPoint = new ArrayList<>();
public Exam () {}
public Exam (Object data) {
super(data);
}
}
Converter 类,写入读取时会分别执行对应转换类型的方法。
同理或许可以在此进行参数校验或其他钩子操作?未曾验证
import javax.persistence.AttributeConverter;
@Component
public class Helper {
public static class Jpa2List implements AttributeConverter<List<?>, String> {
@Override
public String convertToDatabaseColumn(List<?> o) {
if (o == null) return null;
JSONArray a = JSONArray.parseArray(JSON.toJSONString(o));
return a.toString();
}
@Override
public List<?> convertToEntityAttribute(String s) {
if (s == null) return null;
return Arrays.asList(JSONArray.parseArray(s).toArray());
}
}
}
ps: 文章引用的代码块均为我项目中使用的,如有奇怪的地方可能是我未整理得好