簡體   English   中英

如何在 Spring Boot 的 @JoinColumn 列中插入數據?

[英]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);
}
}

我發送POSThttp://localhost:8080/api/addItem

要求:

{
  "todo": "finish portfolio",
  "completed": false,
  "user_id": 1
}

但是在我的 MySQL 工作台中, todocompleted得到正確填充,但user_idnull

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM