繁体   English   中英

Java Spring Boot: ERROR: null value in column "user_id" violates not-null constraint Detail: Failing row contains (36, null, null, 0)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM