我尝试上传一组POJO(Snp),它们与另一个POJO(用户)具有多对一,一对多的双向关系 . 但是当我尝试将请求中包含以下正文的POJO集(从我的客户端上传到spring boot rest api)时:
请求正文:[{“id”:0,“snp”:“AMg =”,“owner”:null},{“id”:0,“snp”:“ASw =”,“owner”:null} ,{ “ID”:0, “SNP”: “ALG =”, “所有者”:空},{ “ID”:0, “SNP”: “AZA =”, “所有者”:空},{“ID “:0,” SNP “:” ZA ==”, “所有者”:空},{ “ID”:0, “SNP”: “AFQ =”, “所有者”:空}]
我收到以下错误:
响应正文:{“timestamp”:1488451488989,“status”:400,“error”:“错误请求”,“异常”:“org.springframework.http.converter.HttpMessageNotReadableException”,“message”:“无法读取document:已经有id的POJO(java.lang.Long)[[ObjectId:key = 0,type = com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator,scope = org.barj.shindan.biology.Snp] ](通过引用链:java.util.HashSet [1] - > org.barj.shindan.biology.Snp [\“id \”]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:已经有POJO for id(java.lang.Long)[[ObjectId:key = 0,type = com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator,scope = org.barj.shindan.biology.Snp]](通过参考链:java.util.HashSet [1] - > org.barj.shindan.biology.Snp [\“id \”])“,”path“:”/ api / user / me / snps“}
我的用户Pojo:
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = User.class)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.auto)
private long id;
@Column(name = "username", nullable = false)
private String username;
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Snp> snps = new HashSet<>();
protected User() {}
public void addSnp(Snp snp) {
this.snps.add(snp);
snp.setOwner(this);
}
public long getId() {
return id;
}
public String getUsername() {
return username;
}
public Set<Snp> getSnps() {
return snps;
}
public void setSnps(Set<Snp> snps) {
for (Snp snp : snps) {
addSnp(snp);
}
}
}
我的Snp Pojo:
@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Snp.class)
public class Snp {
@Id
@GeneratedValue(strategy = GenerationType.auto)
private long id;
@column(name = "snp", columnDefinition = "blob", nullable = false)
private byte[] snp;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "owner_id", nullable = false)
private User owner;
protected Snp() {}
public long getId() {
return id;
}
public byte[] getSnp() {
return snp;
}
public User getOwner() {
return owner;
}
public void setOwner(User user) {
owner = user;
}
}
我的问题是,如何上传POJO集合而无需指定(唯一)ID . 我希望 @GeneratedValue(strategy = GenerationType.AUTO)
能够照顾到这一点 . 将 @JsonIgnore
应用于id字段不起作用 .