@ManyToOne JPA Spring MySQL Ошибка вставки, ноль столбца - PullRequest
0 голосов
/ 02 апреля 2019

Начинаю загружаться весной и использую репозиторий jpa для сохранения локальной базы данных mysql, и у меня возникают проблемы с моей вставкой. Я упростил его для моих классов пользователя и задач, у пользователя может быть задача, и я использую аннотацию @ManyToOne в классах задач для одного направления. Когда конечная точка вызывается в почтовом отделе, я получаю сообщение об ошибке, и трассировка говорит, что столбец user_id равен нулю (это сопоставленный столбец от пользователя).

Для отладки я установил точку останова в классе обслуживания задачи по фактическому методу taskRepo.save (task), и кажется, что user_id на самом деле. Я пробовал двунаправленные сопоставления с одним ко многим и многими к одному с отображением по выбору, но безрезультатно.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true)
private Long id;

private Long postId;

@Column(unique = true, nullable = false)
private String username;

@Column(unique = true, nullable = false, name = "email")
private String email;

@Column(nullable = false)
private String password;





@Id
@GeneratedValue(strategy =GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;

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

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

@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;






@Autowired
private TaskService taskService;

@GetMapping("/getAllTask")
public List<Task> getAllTasks(){
    return taskService.getAllTask();
}

@CrossOrigin(origins = "http://localhost:3000")
@PostMapping("/addTask")
public void addTask(@RequestBody Task task){
    taskService.addTask(task);
}



@Autowired
private TaskRepo taskRepo;

public List<Task> getAllTask(){
    List<Task> tasks = new ArrayList<>();
    taskRepo.findAll().forEach(task -> tasks.add(task));
    return tasks;
}

public void addTask(Task task){
    taskRepo.save(task);
}







{
        "taskName": "Task 1",
        "description": "This is the first item",
        "user_id": 1
    }



{
    "timestamp": "2019-04-02T02:15:06.989+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
    "path": "/task/addTask"
}

[enter image description here][1] ERROR 30016 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause

java.sql.SQLIntegrityConstraintViolationException: Column 'user_id' cannot be null

1 Ответ

0 голосов
/ 02 апреля 2019

Ваш JSON отформатирован неправильно.user_id не является полем Task.

Ваш json должен выглядеть следующим образом:

{
  "taskName": "Task 1",
  "description": "This is the first item",
  "user": {
    "id": 1
  }
}

Поле user json ссылается на

@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;

И поскольку User является объектом, его необходимо представить как JsonObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...