1
我有一個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