MySQLIntegrityConstraintViolationException:Column 'id' 不能为空
MySQLIntegrityConstraintViolationException:Column 'id' cannot be null
我正在使用与休眠和 spring 引导的一对多关系,但出现此错误
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列 'invoice_id' 不能为空
我的实体类
Invoice.java
@Entity
@Table
public class Invoice {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="invoice_id")
private int id;
@OneToMany(mappedBy = "invoice")
private List<Product> products;
}
Product.java
@Entity
@Table
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private int product_id;
@ManyToOne
@JoinColumn(name="invoice_id")
private Invoice invoice;
}
为了创建发票,我需要创建产品,所以当我尝试保存产品时出现错误
ProductService.java
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public void saveProduct(Product product){
product.setDate(new Date());
product.setStatus("Active");
productRepository.save(product);
}
}
我使用注释的方式是否正确?
@Column(name="invoice_id")
要么重命名为
@Column(name="id")
或删除它。
这里的产品 Table 有一个来自 Invoice 的外键引用,它不为空,并且您正在保存没有 Invoice 引用的 Product,因此您得到 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'invoice_id' 不能为空
所以在保存产品时你也需要映射 invoice_id。
我在下面的代码片段中提供了正确的方法
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
@Autowired
private InvoiceRepository invoiceRepository;
public void saveInvoiceAndProduct(){
//either get the existing Invoice Data from db or save new one
Invoice invoice = new Invoice();
List<Product> prods = new ArrayList<>();
Product product = new Product();
product.setDate(new Date());
product.setStatus("Active");
prods.add(product);
invoice.setProducts(prods);
invoiceRepository.save(invoice);
product.setInvoice(invoice);
//linked Product with the invoice_id before saving it
productRepository.save(product);
}
}
我正在使用与休眠和 spring 引导的一对多关系,但出现此错误
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列 'invoice_id' 不能为空
我的实体类
Invoice.java
@Entity
@Table
public class Invoice {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="invoice_id")
private int id;
@OneToMany(mappedBy = "invoice")
private List<Product> products;
}
Product.java
@Entity
@Table
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private int product_id;
@ManyToOne
@JoinColumn(name="invoice_id")
private Invoice invoice;
}
为了创建发票,我需要创建产品,所以当我尝试保存产品时出现错误
ProductService.java
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public void saveProduct(Product product){
product.setDate(new Date());
product.setStatus("Active");
productRepository.save(product);
}
}
我使用注释的方式是否正确?
@Column(name="invoice_id")
要么重命名为
@Column(name="id")
或删除它。
这里的产品 Table 有一个来自 Invoice 的外键引用,它不为空,并且您正在保存没有 Invoice 引用的 Product,因此您得到 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'invoice_id' 不能为空
所以在保存产品时你也需要映射 invoice_id。
我在下面的代码片段中提供了正确的方法
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
@Autowired
private InvoiceRepository invoiceRepository;
public void saveInvoiceAndProduct(){
//either get the existing Invoice Data from db or save new one
Invoice invoice = new Invoice();
List<Product> prods = new ArrayList<>();
Product product = new Product();
product.setDate(new Date());
product.setStatus("Active");
prods.add(product);
invoice.setProducts(prods);
invoiceRepository.save(invoice);
product.setInvoice(invoice);
//linked Product with the invoice_id before saving it
productRepository.save(product);
}
}