繁体   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