将列表序列化为JSON数组
问题描述:
我有一个JPA实体,其自定义对象列表作为其字段之一。使用Jackson转换器,我设法将此列表作为JSON数组存储到MySQL数据库中,但Iam无法在其初始创建后插入此列表。将列表序列化为JSON数组
我可以成功检索现有列表,在内存中添加一个新对象(并测试它是否已插入),然后通过Spring REST存储库保存它。然而,它似乎永远不会持续下去。有任何想法吗?这里是我的代码(这是一个春天启动项目FYI):内
@Entity
@Table(name = "Candidates", schema = "Candidate")
public class Candidate extends ResourceSupport {
@Id
@Column(name = "CandidateID")
private Long candidateID;
// More fields
@Column(name = "Fields")
@Convert(converter = CustomConverter.class)
private List<CandidateField> fields;
//Getters & setters
}
CandidateField类拼成的列表上方有一个列表
候选实体。 CandidateField只是一个POJO,它模拟存储在Candidate表中单个字段中的JSON,它不是一个独立的实体。
public class CandidateField {
private Long fieldID;
private String name;
private boolean current;
public CandidateField() {
}
public CandidateField (Long fieldID, String name, boolean current) {
this.fieldID = fieldID;
this.name = name;
this.current = current;
}
//Getters & Setters
}
转换这一直持续到数据库
public class CollectionConverter implements AttributeConverter<List<CandidateField>, String> {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(List<CandidateField> object) {
try {
return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
return "";
}
}
@Override
public List<CandidateField> convertToEntityAttribute(String data) {
try {
return objectMapper.readValue(data, new TypeReference<List<CandidateField>>() {});
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
代码
public void addField(Long fieldID, Long candidateID) {
Candidate candidate = repository.findOne(candidateID);
candidate.getFields().add(new CandidateField(fieldID, "", true));
repository.saveAndFlush(candidate);
}
库
@RepositoryRestResource
public interface CandidateRepository extends JpaRepository<Candidate,Long>{}
我似乎无法弄清楚为什么这不会持续下去。任何帮助将非常感激。干杯!
嘿布莱恩, 级联类型只适用于实体他们不是? CandidateField只是一个POJO,它模拟存储在Candidate表中单个字段中的JSON,它不是一个独立的实体。谢谢! –
哦,谢谢你指出CandidateField只是一个POJO。我不知何故忽略了它。但是,如果您愿意提供一个精简的测试用例(可能与JUnit结合)并使用内存数据库,我很乐意再看看它。 – Brian