Spring 数据休息:默认时间戳失败,ID 返回 0



我有一个简单的MySql表,如下所示,我只想将"data"字段发布到Spring Data Rest存储库,并自动添加"web_order_id"和"date_added"字段:

CREATE TABLE `web_order` (
`web_order_id` int(11) NOT NULL AUTO_INCREMENT,
`date_added` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`data` text NOT NULL,
PRIMARY KEY (`web_order_id`)
) ENGINE=InnoDB

WebOrder 实体通过 Hibernate 逆向工程生成,并将"web_order_id"和"date_added"字段输出为:

@Id 
@Column(name="web_order_id", unique=true, nullable=false)
public int getWebOrderId() {
return this.webOrderId;
}
public void setWebOrderId(int webOrderId) {
this.webOrderId = webOrderId;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="date_added", nullable=false, length=19)
public Date getDateAdded() {
return this.dateAdded;
}
public void setDateAdded(Date dateAdded) {
this.dateAdded = dateAdded;
}

以下是 WebOrderRepo:

@RepositoryRestResource(path="webOrder",collectionResourceRel = "webOrder")
public interface WebOrderRepo extends CrudRepository<WebOrder,Integer> {
}

问题是当我将以下JSON正文发布到WebOrderRepo时:

{
"data": "{"value":"some long escaped JSON string"}"
}

数据库中的date_added列设置为 NULL,并且web_order_id正在正确递增。我已经检查了数据库中是否为真,这是来自 SDR 的 JSON 响应:

{
"webOrderId": 0,
"dateAdded": null,
"data": "{"value":"some long escaped JSON string"}",
"_links": {
"self": {
"href": "http://localhost:8080/sdr/v1/webOrder/0"
},
"webOrder": {
"href": "http://localhost:8080/sdr/v1/webOrder/0"
}
}
}

我可以在数据库中看到,每次插入的web_order_id都在递增,它们都没有 ID = 0,但 SDR在每个插入上返回 web_order_id = 0(而不是新创建的行的 ID(。我还可以看到date_added是 NULL,而不是自动设置的。

  • 为什么时间戳不默认为 NOW((?
  • 为什么返回显示 ID = 0,而不是数据库中的行 ID?

MySql 5.5 文档指出:

默认情况下,时间戳列不为 NULL,不能包含 NULL 值,赋值 NULL 将分配当前时间戳。

我不知道为什么没有插入日期,或者如何取回正确的ID。即使我在 JSON 中发布日期添加 = null,它也不会自动分配。

尝试将@GeneratedValue添加到webOrderId字段中,并将@CreatedDate添加到dateAdded字段中。我还将字段设置为只读,就像它们应该的那样。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="web_order_id", unique=true, nullable=false)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private int webOrderId;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="date_added", nullable=false, length=19)
@CreatedDate
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private Date dateAdded;

最新更新