我尝试上传一组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字段不起作用 .