gpt4 book ai didi

java - Spring 数据休息: Default Timestamp Fails and ID returns 0

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:25 30 4
gpt4 key购买 nike

我有一个简单的 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_add”字段输出为:

@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 文档声明:

By default, TIMESTAMP columns are NOT NULL, cannot contain NULL values, and assigning NULL assigns the current timestamp.

我不明白为什么没有插入日期,或者如何取回正确的 ID。即使我在 JSON 中 POST dateAdded = null 它也不会自动分配。

最佳答案

尝试将 @GenerateValue 添加到您的 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;

关于java - Spring 数据休息: Default Timestamp Fails and ID returns 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630198/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com