У меня есть простая таблица 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 Reverse Engineering и выводит поля '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 увеличивается должным образом. Я проверил, что это верно в БД, и это ответ JSON от SDR:
{
"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 для каждой вставки (вместо идентификатора вновь созданной строки). Я также вижу, что date_added имеет значение NULL, а не задается автоматически.
- Почему для отметки времени не задано значение NOW ()?
- Почему возвращаемое значение показывает ID = 0, а не идентификатор строки в БД?
Состояние документов MySql 5.5:
По умолчанию столбцы TIMESTAMP НЕ ПУСТО (NULL) и не могут содержать Значения NULL, а назначение NULL назначает текущую временную метку.
Я не могу понять, почему дата не вставляется или как вернуть правильный идентификатор. Даже если я POST dateAdded = null в JSON, он не назначается автоматически.