【发布时间】:2019-03-01 01:13:30
【问题描述】:
我有一个与 POST JSON 对象相关的问题,以将数据持久保存在 Spring Boot 应用程序中。
实体如下所示:
@Entity
@Table(name = "extended_company_info")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ExtendedCompanyInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "city", nullable = false)
private String city;
@NotNull
@Column(name = "url", nullable = false)
private String url;
@NotNull
@Column(name = "phone", nullable = false)
private String phone;
@OneToMany(mappedBy = "extendedCompanyInfo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<AddressInfo> addresses = new HashSet<>();
@OneToOne
@JoinColumn(unique = true)
@JsonIgnore
private Company company;
//… getters setters
}
表格如下所示:extended_company_info (id, city, url, phone)
@Entity
@Table(name = “address_info")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class AddressInfo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = “address”, nullable = false)
private String address;
@NotNull
@Enumerated(EnumType.STRING)
@Column(name = “address_type", nullable = false)
private AddressType addressType;
@JsonIgnore
@ManyToOne(optional = false)
@JoinColumn(name="extended_company_info_id")
@NotNull
private ExtendedCompanyInfo extendedCompanyInfo;
//… getters setters
}
表格如下所示:address_info (id, address, address_type, extended_company_info_id)
public enum AddressType {
ADDRESS1, ADDRESS2, ADDRESS3
}
我发布的 JSON 对象如下所示:
{
“city”: “city”,
“url”: “http://www.url.com”,
“phone”: “123456789”,
“addresses”: [{
“address”: “address abcd”,
“addressType": “ADDRESS1”
}],
"company": {
"id": 1,
"name": “Company name“,
"shortName": “Company shortname“,
"customerNumber": "1234"
}
}
但我收到以下错误:
Bad Request: Validation failed for classes [package.AddressInfo] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='may not be null', propertyPath= extendedCompanyInfo, rootBeanClass=class package.AddressInfo, messageTemplate='{javax.validation.constraints.NotNull.message}'}
我应该以什么方式在 JSON 对象中构建 extendedCompanyInfo?
我错过了什么?
【问题讨论】:
-
extendedCompanyInfo 使用@NotNull 进行注释。删除它并再次测试。
-
当您发布没有带有 NotNull 注释的对象的 JSON 对象时,为什么您在某些对象上有 NotNull 注释
标签: hibernate spring-boot jackson entity