Почему я получаю нулевое значение даты при создании объекта Todo?

Что не так с моим приложением to-do? Я хочу, чтобы пользователь мог добавить задачу и сохранить ее в моей базе данных MySQL со временем ее создания, но я не знаю, что я делаю неправильно.

Я новичок в изучении Springboot и буду признателен за любые предложения или советы.

Сущность Todo:


import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
import java.util.Date;


@Entity(name = "Todo")
@NoArgsConstructor
@Table(name = "todos")
public class Todo {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

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

    @Column(name="target_date")
    @CreationTimestamp
    private Date targetDate;

    public Todo(String description) {
        this.description = description;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Date getTargetDate() {
        return targetDate;
    }

    public void setTargetDate(Date targetDate) {
        this.targetDate = targetDate;
    }

    @Override
    public String toString() {
        return "Todo{" +
                "id=" + id +
                ", description='" + description + '\'' +
                ", targetDate=" + targetDate +
                '}';
    }
}

Добавление Todo с помощью Spring Data JPA


import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.transaction.Transactional;
import java.util.List;

@Repository
@Component
public interface TodoRepository extends JpaRepository<Todo, Integer> {

    @Modifying
    @Query(value = "INSERT INTO todos (description) VALUES (:description)", nativeQuery=true)
    @Transactional
    void addTodo(@Param("description") String description);

}

TodoController

@RestController
@RequestMapping(value = "/api/v1/todos")
@AllArgsConstructor
public class TodoController {

    @Autowired
    private ITodoService todoService;

    @PostMapping(value = "/add-todo")
    public String addTodo(@RequestParam String description) {
        Todo todo = new Todo();
        todo.setDescription(description);
        todoService.addTodo(todo);

        return todo.toString();
    }

после получения почтового запроса target_date получает NULL в MySQL

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я предполагаю, что вы можете решить эту проблему, используя persist():

@Autowired EntityManager entityManager;

@PostMapping(value = "/add-todo")
    public String addTodo(@RequestParam String description) {
        Todo todo = new Todo();
        todo.setDescription(description);
        entityManager.persist(todo);

        return todo.toString();
    }

Я думаю, проблема здесь в том, что вы используете nativeQuery для создания сущности, давайте попробуем это сделать.

Begging 10.04.2022 12:01

Я получаю эту ошибку: «Нет EntityManager с фактической транзакцией, доступной для текущего потока, - не может надежно обработать« постоянный »вызов»

Omar Ashraf 10.04.2022 12:04

Вы можете добавить аннотацию @Transactional чуть выше @PostMapping, чтобы решить эту проблему, лучше перенести эту логику на сервисный уровень, но в любом случае

Begging 10.04.2022 12:07

Спасибо за помощь. Как я могу переместить это на сервисный уровень?

Omar Ashraf 10.04.2022 12:18

Переместите @Autowired EntityManager entityManager в свой TodoService; Создайте addTodo(String description) также здесь и добавьте к нему аннотацию @Transactional, скопируйте и вставьте Todo todo = new Todo(); todo.setDescription(description); entityManager.persist(todo); в тело метода addTodo() и все :)

Begging 10.04.2022 12:22

Я не уверен, почему мой вопрос получил отрицательный голос, но, тем не менее, я ценю вашу помощь.

Omar Ashraf 10.04.2022 12:35

@OmarAhraf Ваш вопрос разумен, поэтому я проголосую за него :)

Begging 10.04.2022 12:38

Я думаю, что лучше отметить меня в StackOverflow, я постараюсь помочь вам, как только смогу

Begging 10.04.2022 12:52

Другие вопросы по теме