Jpa “不允许为空”列;创建日期;;

Jpa “不允许为空”列;创建日期;;,jpa,spring-boot,h2,Jpa,Spring Boot,H2,我正在尝试将我的保存端点执行到postman中,并收到以下错误: 原因:org.h2.jdbc.jdbccbatchUpdateException:列“创建日期”不允许为NULL;SQL语句: 插入客户(身份验证、创建日期、客户id、默认付款方式、guid、上次编辑日期、预账单地址、预发货地址、状态、门店代码、类型、用户id、uidpk)值(?,,,,,,,,,,,,,,)[23502-195] 这是插入邮递员的Json: { “用户ID”:“pelzer”。nyatt@yahoo.fr", “

我正在尝试将我的保存端点执行到postman中,并收到以下错误:

原因:org.h2.jdbc.jdbccbatchUpdateException:列“创建日期”不允许为NULL;SQL语句: 插入客户(身份验证、创建日期、客户id、默认付款方式、guid、上次编辑日期、预账单地址、预发货地址、状态、门店代码、类型、用户id、uidpk)值(?,,,,,,,,,,,,,,)[23502-195]

这是插入邮递员的Json:

{
“用户ID”:“pelzer”。nyatt@yahoo.fr",
“首选账单地址”:“空”,
“pref_ship_address_uid”:“NULL”,
“创建日期”:“2017-05-22T20:19:37.855”,
“上次编辑日期”:“2017-10-01T11:11:11.755”,
“guid”:“5682ff69-e037-4d11-9db8-8d5ce7ad2285”,
“地位”:1,
“身份验证uid”:6809573,
“类型”:“CustomerExtImpl”,
“存储代码”:“S_100”,
“默认付款方式uid”:“空”,
客户uid:“空”
}
这是带有创建日期字段的my cutomer实体类

@Entity
@Table(name = "tcustomer")
public class Customer implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@SequenceGenerator(name = "pk_sequence",sequenceName = "sequence_tcustomer", allocationSize = 100)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk_sequence")
private Long uidpk;

@Column(name = "user_id", nullable=false)
private String userId;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "pref_bill_address_uid")
private CustomerAddress prefBillAddressUid;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "pref_ship_address_uid")
private CustomerAddress prefShipAddressUid;

@OneToOne(targetEntity = CustomerProfileValue.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "customer_uid")
private CustomerProfileValue customerProfileValue;

@OneToMany(targetEntity = CustomerAddress.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "customer_uid")
private List<CustomerAddress> customerAddress = new ArrayList<CustomerAddress>();

@Column(name = "default_payment_method_uid")
private Long defaultPaymentMethodUid;

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "authentication_uid")
private CustomerAuthentication authenticationUid;

@Column(name = "creation_date", nullable=false)
private Date creationDate;

@Column(name = "last_edit_date", nullable=false)
private Date lastEditDate;

@Column(name = "guid", nullable=false)
private String guid;

@Column(name = "status", nullable=false)
private Long status;

@Column(name = "type")
private String type;

@Column(name = "storecode", nullable=false)
private String storecode;

//getters and setters 
@实体
@表(name=“tcustomer”)
公共类Customer实现了可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@SequenceGenerator(name=“pk\u sequence”,sequenceName=“sequence\u tcustomer”,allocationSize=100)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“pk_SEQUENCE”)
私人长uidpk;
@列(name=“user\u id”,null=false)
私有字符串用户标识;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“pref\u bill\u address\u uid”)
私有CustomerAddress prefBillAddressUid;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“pref\u ship\u address\u uid”)
私有CustomerAddress prefShipAddressUid;
@OneToOne(targetEntity=CustomerProfileValue.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“customer\u uid”)
私有CustomerProfileValue CustomerProfileValue;
@OneToMany(targetEntity=CustomerAddress.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“customer\u uid”)
私有列表customerAddress=new ArrayList();
@列(name=“默认付款方式”)
私人长期拖欠付款方法UID;
@OneToOne(级联=级联类型.ALL)
@JoinColumn(name=“authentication\u uid”)
私有CustomerAuthenticationAuthenticationUID;
@列(name=“创建日期”,null=false)
私人约会;
@列(name=“last\u edit\u date”,null=false)
私人日期lastEditDate;
@列(name=“guid”,nullable=false)
私有字符串guid;
@列(name=“status”,nullable=false)
私人长期身份;
@列(name=“type”)
私有字符串类型;
@列(name=“storecode”,null=false)
私有字符串存储码;
//接球手和接球手

我愿意提供更多信息。你的json应该跟在你实体中变量的名字后面。 因此,它应该是“creationDate”,而不是“creationDate”(您应该为所有json更改它)

添加此项时:

@Column(name = "creation_date", nullable=false)
private Date creationDate;

基本上,这意味着数据库中有一个名为“creation_date”的列不可为空,并且您正在将代码映射为“creationDate”.

如何将日期从Json转换为实体中的日期?我不知道您是否在谈论CustomerMapper?我没有具体的方法。有什么更多的数据安装方法吗?请使用两种方法的DateUtil类。
`公共静态日期解析(字符串dateToParse)抛出ParseException
公共静态字符串格式(Date-dateToFormat)`您是否尝试过调试和检查字段是否有值?这是错误的答案,因为Hibernate正在转换Camel case in u so creationDate=creation_-dateok中的Camel case,我这样做了,错误变成了邮递员:JSON解析错误:无法构造fr.kiabi.bekom.services.customer.domain.CustomerAddress的实例:没有字符串参数构造函数/工厂方法从字符串值('NULL')反序列化;当您在JSON上传递“NULL”时,您的意思是这些值是写为“NULL”的字符串或者您希望它在数据库中为空值?如果您希望它们为空值,请不要将其传递给json(整个标记:值语句)。我希望该值在数据库中为空值。因此我编辑它u“prefBillAddressUid”:“”,。****错误**JSON解析错误:无法构造fr.kiabi.bekom.services.customer.domain.CustomerAddress的实例:没有字符串参数构造函数/工厂方法从字符串值(“”)反序列化;@solo如果要将null添加到数据库中,则根本不将其添加到JSON中。如果添加“prefBillAddressUid”:,您仍在添加一个空字符串。您得到的错误是因为您试图将字符串传递到json上的列表中。