[英]How do I insert data in a @JoinColumn column in Spring Boot?
當我通過 POST 請求將數據傳遞給我的 TodoItem model 時,只有@column
指定的列被填寫,但@JoinColumn
列是null
即使我使用 Z0ECD11C1D7A287401FZD1'A 中的列名發送。 我的 GET 請求 API 工作得很好,所以我從 controller 代碼中省略了它們。
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
在 spring 數據中(使用 hibernate 或 JPA),當保存引用另一個實體的實體時。 您必須首先通過 id 獲取引用的 object,然后在持久性實體中使用 setter 設置它。 之后,您可以保存並獲取(FK 列)進行保存。
例如,您首先必須使用用戶存儲庫並調用
User user = userRepository.findById(userId);
接着
todoItem.setUser(user);
之后,您可以保存項目,FK 列將被填充。
我認為這是保存參考實體的方法。 您不能僅在 int id 上中繼。
您的請求正文 JSON 也必須是這樣的:
{
"todo": "finish portfolio",
"completed": false,
"user": {
"user_id":1
}
}
最佳實踐也是定義和使用 DTO object 而不是實體本身。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.