我正在尝试在我的数据库的blob字段中持久保存LinkedHashMap。
我的实体如下所示
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private long timestamp;
@Lob
private Map<String, Object> payload;
...
我的存储库如下所示
@Repository
public interface EventRepositoryInterface extends CrudRepository<Event, Long> {
}
尝试存储我的Event对象时,我收到以下错误消息
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.sql.Blob
关于什么是错的任何线索?
答案 0 :(得分:1)
BLOB
用于存储二进制数据,BLOB
值被视为二进制字符串(字节字符串)。它们没有字符集,排序和比较基于列值中字节的数值。
我建议你改用TEXT
。
此外,您必须使用JPA @EntityListeners or Callbacks Methods @PrePersist: and @PostLoad
您的代码
@Entity
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private long timestamp;
@Column(columnDefinition = "TEXT")
private String payload
@Transient
private Map<String, Object> payloadOb;
@PrePersist
public payloadMapToText(){
this.payload = mapToString(this.payloadOb);
}
@PostLoad
public payloadTextToMap(){
this.payloadOb = stringToMap(this.payload);
}
}
答案 1 :(得分:0)
您需要为映射添加更多注释:
@Lob
@MapKeyColumn(name = "key_column")
@Column(name = "value_column")
@ElementCollection
private Map<String, Object> payload;
这是必需的设置,其中地图定义为Map<Basic, Basic>