我正在使用与hibernate和spring boot之间的一对多关系,我收到此错误
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列'invoice_id'不能为null
我的实体课程
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);
}
}
我是否正确使用注释?
答案 0 :(得分:0)
@Column(名称=&#34; INVOICE_ID&#34) 将其重命名为@Column(name =&#34; id&#34;)或将其删除。
答案 1 :(得分:0)
这里的产品表有一个来自发票的外键引用,它不是空的,你正在保存没有发票引用的产品,所以你得到 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'invoice_id' cannot be null
SO 在保存产品时,您也需要映射 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);
}
}