当我通过post请求将数据传递给todoitem模型时,只有 @column
得到填补,但 @JoinColumn
列为 null
即使我在发送的json中使用列名。但是,我的get请求api工作得很好,所以我从控制器代码中省略了它们。
todoitem.java文件
@Entity
@Table(name = "todo_item")
public class TodoItem {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "todo")
private String todo;
@Column(name = "completed")
private boolean completed;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
public TodoItem() {
}
public TodoItem(String todo, boolean completed) {
this.todo = todo;
this.completed = completed;
}
// setters and getters
}
我的构装师没有提到 user_id
我不认为它需要,但我可能错了。
todocontroller.java文件
@RestController
@RequestMapping("/api")
public class TodoController {
@Autowired
private UserRepository userRepository;
@Autowired
private TodoRepository todoRepository;
@PostMapping("/addItem")
public TodoItem addTodoItem(@RequestBody TodoItem todoItem) {
return this.todoRepository.save(todoItem);
}
}
我发送 POST
至 http://localhost:8080/api/addItem
请求:
{
"todo": "finish portfolio",
"completed": false,
"user_id": 1
}
但是在我的mysql工作台上, todo
以及 completed
适当填充,但是 user_id
说 null
1条答案
按热度按时间s4n0splo1#
在spring数据(使用hibernate或jpa)中,保存引用了另一个实体的实体时。必须首先按id获取引用的对象,然后在持久性实体中使用setter设置它。之后,您可以保存并获取要保存的(fk列)。
例如,您首先必须使用用户存储库并调用
然后
之后,您可以保存项目和fk列将得到填充。
我认为这是保存引用实体的方法。你不能只依靠int-id。
此外,您的请求主体json必须如下所示:
}
另外,定义和使用dto对象而不是实体本身也是最佳实践。