![](/img/trans.png)
[英]ERROR: null value in column "id" of relation xxx violates not-null constraint - Spring Data JPA
[英]Java Spring Boot: ERROR: null value in column "user_id" violates not-null constraint Detail: Failing row contains (36, null, null, 0)
我不斷收到此錯誤:“user_id”列中的 null 值違反非空約束詳細信息:失敗行包含(36、null、Z37A6259CC0C1DAE299A7866489DFF0.BDZ、0) 我在購物車 Object 中有 setUser(用戶存在於數據庫中)。 但是當我嘗試保存它時,用戶 Object 的值仍然為 null:(36, null ,Z27BA6259CC089DFF)
手推車控制器.class
@PostMapping(value = "/api/carts/users/{userId}/products/{productId}")
public Cart addProductInCart(@PathVariable int userId, @PathVariable int productId) {
Cart cart = new Cart();
cart.setUser(userRepository.findById(userId));
cart.setProduct(productRepository.findById(productId));
return cartRepository.save(cart);
}
購物車.class
@Entity
@Table(name = "cart")
public class Cart {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false, insertable = false, updatable = false)
private User user;
@ManyToOne
@JoinColumn(name = "product_id", nullable = false, insertable = false, updatable = false)
private Product product;
@Column(name = "amount")
private int amount;
^ 包含 getter 和 setter
用戶.class
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "username")
public String username;
@Column(name = "password")
public String password;
@Column(name = "role")
public String role;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Cart> carts;
^ 包含 getter 和 setter
嘗試
@PostMapping(value = "/api/carts/users/{userId}/products/{productId}")
public Cart addProductInCart(@PathVariable int userId, @PathVariable int productId) {
Cart cart = new Cart();
User user = userRepository.findById(userId);
user.getCarts().add(cart);
cart.setUser(user);
cart.setProduct(productRepository.findById(productId));
return cartRepository.save(cart);
}
或者我會推薦一種方法:
public void addCart(Cart cart) {
if(cart != null) {
this.carts.add(cart);
cart.setUser(this);
}
}
在您的User
class 中。 還要確保您的carts
變量已初始化,我通常在聲明時這樣做,如下所示:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Cart> carts = new HashSet<>();
或者您只需將其添加到構造函數或 getter 中。 您可能還必須為Product
添加類似的功能,如果您有雙向關系,則需要維護它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.