我得到这个错误,我不能解决这个问题。
基于这个主题的答案很多,但都不适合我。
我们的目标是拯救 Todo
然后保存 TaskTodo
(连接表) Task
以及 Todo
).
我试着拯救和冲水 Todo
然后保存 TaskTodo
,但失败了。
有人能告诉我哪里出了问题吗?
错误:
java.sql.sqlintegrityconstraintviolationexception:无法添加或更新子行:外键约束失败( todo
. task_todo
,约束 FK8dn0kderp1dame65xsokdaavj
外键( todo_id
)参考文献 todo
( id
))
赋值-父抽象类:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Assignment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
}
todo-域类:
@Entity
public class Todo extends Assignment {
private boolean isChecked;
@OneToMany(mappedBy = "todo")
Set<TaskTodo> taskTodoSet;
}
任务-域类:
@Entity
public class Task extends Assignment {
private String description;
@OneToMany(mappedBy = "task")
public
Set<TaskTodo> taskTodoSet;
public Task() {}
public Task(String name) {
this.setName(name);
}
}
tasktodo-域类:
@Entity
public class TaskTodo {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
@ManyToOne
@JoinColumn(name = "task_id")
Task task;
@ManyToOne
@JoinColumn(name = "todo_id")
Todo todo;
public TaskTodo(Task task, Todo todo) {
this.task = task;
this.todo = todo;
}
}
保存todo和tasktodo的服务功能:
@Override
public void saveTodo(Todo todo, Long taskId) {
Task task = getTaskById(taskId);
todoRepository.saveAndFlush(todo);
TaskTodo taskTodo = new TaskTodo(task, todo);
taskTodoRepository.save(taskTodo);
}
1条答案
按热度按时间eivnm1vs1#
我设法找出了问题所在
服务功能应如下所示:
原因是因为
Todo
作为参数发送的本身没有id,因此出现了错误。当我把
todo = todoRepository.saveAndFlush(todo);
,saveAndFlush
返回本身具有id的对象。正因为如此TaskTodo
可能会得救。