jpa读写钩子函数,数据库存储对象

当前版本

  • 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: 文章引用的代码块均为我项目中使用的,如有奇怪的地方可能是我未整理得好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值