如何解决如果两个实体父子实体同时保存,它们映射为一对多关系,则抛出 id 未找到父类异常
我的关系如图所示: enter image description here
我在数据库中插入数据时遇到了麻烦,因为账单 ID 保存得有点晚,那个时候还同时在数据库中保存了buybill,并且想要将账单 ID 保存在关系中并抛出异常,例如未找到发票 ID 并且只有我的帐单数据保存在数据库中,并且因未找到帐单 ID 异常而购买帐单,因此请帮助我。
谢谢,
还有一件事,我包括我的后映射:
这--->
@PostMapping(value="/customers/{customerId}/bills/{InvoiceNo}/buyBills",produces="application/json",consumes="application/json")
和
这--->
@PostMapping(value="/customers/{customerId}/bills/{InvoiceNo}/bills",consumes="application/json")
同时使用两个 $http.post() 和一个 html 中的 angularjs 提交按钮。
这是我通过 angular.js onclick 的 $scope.purchase 函数发布两个 http 请求的 javascript 代码,其中我发布了两个映射到 URL1 和 URL2 上方的 url,带有 json 数据和 BillData,buyBillFormss.html 代码:
<script type="text/javascript">
var invoice = angular.module('invoice',[]);
invoice.controller('InvoiceController',function($scope,$window,$http){
$scope.purchase = function(){
if(!$scope.myForm.$valid){
console.log("Invalid")
$scope.err = "Invaid Transaction Please Insert valid field or Refresh!!!";
}
if($scope.myForm.$valid){
angular.forEach($scope.invoice.items,function(item){
var Bill = [];
$scope.am = (((item.qty * item.price)+((item.qty * item.price)*item.gst)/100)-item.dis).toFixed(2);
angular.forEach($scope.invoice.items,function (value,key) {
var am = (((value.qty * value.price)+((value.qty * value.price)*value.gst)/100)-value.dis).toFixed(2);
Bill.push({
"proId" : value.proId,"name" : value.name,"description" : value.description,"qty" : value.qty,"unit" : value.unit,"price" : value.price,"dis" : value.dis,"gst" : value.gst,"amount" : am
});
});
console.log("Bill ::");
console.log(Bill);
localStorage.setItem("data",JSON.stringify(Bill));
///////////////////////////////////////////////////////
var id = document.getElementById("ids").innerText;
var InvoiceNo = document.getElementById("InvoiceNo").innerText;
var data={
"proId" : item.proId,"name" : item.name,"description" : item.description,"qty" : item.qty,"unit" : item.unit,"price" : item.price,"dis" : item.dis,"gst" : item.gst,"amount" : $scope.am
};
console.log("Data ::");
console.log(data);
$scope.CustomerId = id;
$scope.InvoiceNo = InvoiceNo;
var URL1 = "http://localhost:8083/cust/customers/"+$scope.CustomerId+"/bills/"+$scope.InvoiceNo+"/buyBills";
$http.post(URL1,data);
});
//angular.forEach($scope.invoice.items,function(item){
var id = document.getElementById("ids").innerText;
var name = document.getElementById("name").innerText;
var InvoiceNo = document.getElementById("InvoiceNo").innerText;
var address = document.getElementById("address").innerText;
var mobileNo = document.getElementById("mobileNo").innerText;
var note = document.getElementById("n").value;
var InterestRate = document.getElementById("i").value;
var CredibilityStatus = "very Good";
var guarantorName = document.getElementById("g").value;
var BillData={
"invoiceNo" : InvoiceNo,"name" : name,"address" : address,"mobileNo" : mobileNo,"totalGSTAmount" : ($scope.GST()).toFixed(2),"totalDiscountAmount" : $scope.Dis(),"guarantorName" : guarantorName,"totalAmount" : ($scope.TotalAmount()).toFixed(2),"paidAmount" : ($scope.PaidAmount()).toFixed(2),"dueAmount" : ($scope.DueAmount()).toFixed(2),"status" : $scope.Status(),"interestRate" : InterestRate,"credibilityStatus" : CredibilityStatus,"note" : note
};
console.log("BillData ::");
console.log(BillData);
$scope.CustomerId = id;
$scope.InvoiceNo = InvoiceNo;
var URL2 = "http://localhost:8083/cust/customers/"+$scope.CustomerId+"/bills/"+$scope.InvoiceNo+"/bills";
$http.post(URL2,BillData);
localStorage.setItem("dataAct",JSON.stringify(BillData));
//});
$window.location.href = "/Bill"
}
}
});
</script>
我的代码在这里:
这是我的 customer.java 实体:
package com.alpha.demo.model;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.UUID;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.CreationTimestamp;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "customers")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "uniqueId",updatable = false,nullable = false)
private UUID uniqueId = UUID.randomUUID();
@Column(columnDefinition = "TEXT")
private String photos;
private String fullName;
private String aadhaarNo;
private String guarantor;
private String address;
private String mobileNo;
private String note;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date",updatable=false)
private Date createDate;
@OneToMany(mappedBy = "customer",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
private Set<Bill> Bill;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public UUID getUniqueId() {
return uniqueId;
}
public void setUniqueId(UUID uniqueId) {
this.uniqueId = uniqueId;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getPhotos() {
return photos;
}
public void setPhotos(String photos) {
this.photos = photos;
}
public String getAadhaarNo() {
return aadhaarNo;
}
public void setAadhaarNo(String aadhaarNo) {
this.aadhaarNo = aadhaarNo;
}
public String getGuarantor() {
return guarantor;
}
public void setGuarantor(String guarantor) {
this.guarantor = guarantor;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getMobileNo() {
return mobileNo;
}
public void setMobileNo(String mobileNo) {
this.mobileNo = mobileNo;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Set<Bill> getBill() {
return Bill;
}
public void setBill(Set<Bill> bill) {
Bill = bill;
}
public Customer(String photos,String fullName,String aadhaarNo,String guarantor,String address,String mobileNo,String note,Date createDate) {
super();
this.photos = photos;
this.fullName = fullName;
this.aadhaarNo = aadhaarNo;
this.guarantor = guarantor;
this.address = address;
this.mobileNo = mobileNo;
this.note = note;
this.createDate = createDate;
}
public Customer() {
}
}
这是我的 Bill.java 实体:
package com.alpha.demo.model;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.hibernate.annotations.CreationTimestamp;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "bills")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class Bill implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long invoiceNo;
private String guarantorName;
private String TotalGSTAmount;
private String TotalDiscountAmount;
private String TotalAmount;
private String PaidAmount;
private String DueAmount;
private String InterestRate;
private String TotalInterestAmount;
private String Status;
private String CredibilityStatus;
private String Note;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "billing_date",updatable=false)
private Date BillingDate;
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "customer_id",nullable = false)
@JsonIgnore
private Customer customer;
@OneToMany(mappedBy = "bill",fetch = FetchType.LAZY)
private Set<BuyBill> BuyBill;
public Bill() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getInvoiceNo() {
return invoiceNo;
}
public void setInvoiceNo(Long invoiceNo) {
this.invoiceNo = invoiceNo;
}
public String getGuarantorName() {
return guarantorName;
}
public void setGuarantorName(String guarantorName) {
this.guarantorName = guarantorName;
}
public String getTotalAmount() {
return TotalAmount;
}
public void setTotalAmount(String totalAmount) {
TotalAmount = totalAmount;
}
public String getPaidAmount() {
return PaidAmount;
}
public void setPaidAmount(String paidAmount) {
PaidAmount = paidAmount;
}
public String getDueAmount() {
return DueAmount;
}
public void setDueAmount(String dueAmount) {
DueAmount = dueAmount;
}
public String getInterestRate() {
return InterestRate;
}
public void setInterestRate(String interestRate) {
InterestRate = interestRate;
}
public String getTotalInterestAmount() {
return TotalInterestAmount;
}
public void setTotalInterestAmount(String totalInterestAmount) {
TotalInterestAmount = totalInterestAmount;
}
public String getStatus() {
return Status;
}
public void setStatus(String status) {
Status = status;
}
public String getTotalGSTAmount() {
return TotalGSTAmount;
}
public void setTotalGSTAmount(String totalGSTAmount) {
TotalGSTAmount = totalGSTAmount;
}
public String getTotalDiscountAmount() {
return TotalDiscountAmount;
}
public void setTotalDiscountAmount(String totalDiscountAmount) {
TotalDiscountAmount = totalDiscountAmount;
}
public Date getBillingDate() {
return BillingDate;
}
public void setBillingDate(Date billingDate) {
BillingDate = billingDate;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Set<BuyBill> getBuyBill() {
return BuyBill;
}
public void setBuyBill(Set<BuyBill> buyBill) {
BuyBill = buyBill;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public String getCredibilityStatus() {
return CredibilityStatus;
}
public void setCredibilityStatus(String credibilityStatus) {
CredibilityStatus = credibilityStatus;
}
public String getNote() {
return Note;
}
public void setNote(String note) {
Note = note;
}
public Bill(Long id,Long invoiceNo,String guarantorName,String totalGSTAmount,String totalDiscountAmount,String totalAmount,String paidAmount,String dueAmount,String interestRate,String totalInterestAmount,String status,String credibilityStatus,Date billingDate,Customer customer,Set<com.alpha.demo.model.BuyBill> buyBill) {
super();
this.id = id;
this.invoiceNo = invoiceNo;
this.guarantorName = guarantorName;
TotalGSTAmount = totalGSTAmount;
TotalDiscountAmount = totalDiscountAmount;
TotalAmount = totalAmount;
PaidAmount = paidAmount;
DueAmount = dueAmount;
InterestRate = interestRate;
TotalInterestAmount = totalInterestAmount;
Status = status;
CredibilityStatus = credibilityStatus;
Note = note;
BillingDate = billingDate;
this.customer = customer;
BuyBill = buyBill;
}
@Override
public String toString() {
return "Bill [id=" + id + ",invoiceNo=" + invoiceNo + ",guarantorName=" + guarantorName + ",TotalGSTAmount="
+ TotalGSTAmount + ",TotalDiscountAmount=" + TotalDiscountAmount + ",TotalAmount=" + TotalAmount
+ ",PaidAmount=" + PaidAmount + ",DueAmount=" + DueAmount + ",InterestRate=" + InterestRate
+ ",TotalInterestAmount=" + TotalInterestAmount + ",Status=" + Status + ",CredibilityStatus="
+ CredibilityStatus + ",Note=" + Note + ",BillingDate=" + BillingDate + ",customer=" + customer
+ ",BuyBill=" + BuyBill + "]";
}
}
这是我的 BuyBill 实体:
package com.alpha.demo.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@Entity
@Table(name = "buyBills")
@JsonIgnoreProperties({"hibernateLazyInitializer","handler"})
public class BuyBill implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long proId;
private String name;
private String description;
private String qty;
private String unit;
private String price;
private String dis;
private String gst;
private String amount;
@ManyToOne(fetch = FetchType.LAZY,optional = false)
@JoinColumn(name = "bill_id",nullable = false)
@JsonIgnore
private Bill bill;
public BuyBill(Long id,Long proId,String name,String description,String qty,String unit,String price,String dis,String gst,String amount,Bill bill) {
super();
this.id = id;
this.proId = proId;
this.name = name;
this.description = description;
this.qty = qty;
this.unit = unit;
this.price = price;
this.dis = dis;
this.gst = gst;
this.amount = amount;
this.bill = bill;
}
public BuyBill() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getQty() {
return qty;
}
public void setQty(String qty) {
this.qty = qty;
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getDis() {
return dis;
}
public void setDis(String dis) {
this.dis = dis;
}
public String getGst() {
return gst;
}
public void setGst(String gst) {
this.gst = gst;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public Bill getBill() {
return bill;
}
public void setBill(Bill bill) {
this.bill = bill;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Long getProId() {
return proId;
}
public void setProId(Long proId) {
this.proId = proId;
}
}
这是我的帐单 JPA 存储库:
package com.alpha.demo.Repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import com.alpha.demo.model.Bill;
public interface BillRepository extends JpaRepository<Bill,Long>{
List<Bill> findByCustomerId(Long custoemrId);
@Query(value = "SELECT MAX(id) FROM bills",nativeQuery = true)
Long getNextSeriesId();
Optional <Bill> findByinvoiceNo(Long invoiceNo);
}
这是我的账单控制器,我在那里执行 crud 操作:
package com.alpha.demo.controller;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import com.alpha.demo.Repository.BillRepository;
import com.alpha.demo.Repository.BuyBillRepository;
import com.alpha.demo.Repository.CustomerRepository;
import com.alpha.demo.exception.NotFoundException;
import com.alpha.demo.model.Bill;
import com.alpha.demo.model.BuyBill;
import com.alpha.demo.model.Customer;
@RestController
@RequestMapping("/cust")
public class BillController {
@Autowired
private BillRepository BillRepository;
@Autowired
private BuyBillRepository buyBillRepository;
@Autowired
private CustomerRepository customerRepository;
@GetMapping("/customersBuyBill/{id}")
public ModelAndView showUpdateForm(@PathVariable("id") long id,@ModelAttribute @Valid @RequestBody Bill bill,@ModelAttribute @Valid @RequestBody BuyBill buyBill,Model model) {
ModelAndView mv = new ModelAndView("buyBillFormss.html");
Customer ct = customerRepository.findById(id)
.orElseThrow(() -> new IllegalArgumentException("Invalid user Id:" + id));
model.addAttribute("ct",ct);
model.addAttribute("bill",bill);
model.addAttribute("buyBill",buyBill);
//BillRepository.getNextSeriesId();
if(BillRepository.getNextSeriesId()==null) {
Long InvoiceNo = (long) 1;
model.addAttribute("invoiceNo",InvoiceNo);
}
if(BillRepository.getNextSeriesId()!=null) {
Long InvoiceNo = BillRepository.getNextSeriesId() + 1;
model.addAttribute("invoiceNo",InvoiceNo);
}
return mv;
}
@PostMapping(value="/customers/{customerId}/bills/{invoiceNo}/bills",consumes="application/json")
@ResponseBody
public ModelAndView addBillRequest(@PathVariable Long customerId,@PathVariable Long invoiceNo,@Valid @RequestBody Bill bill) {
return customerRepository.findById(customerId) .map(customer -> {
bill.setCustomer(customer);
BillRepository.save(bill);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}");
return mv;
}).orElseThrow(() -> new NotFoundException("Customer not found!"));
}
@PostMapping(value="/customers/{customerId}/bills/{invoiceNo}/buyBills",consumes="application/json")
@ResponseBody
public ModelAndView addBuyBillRequest(@PathVariable Long customerId,@Valid @RequestBody BuyBill buyBill){
System.out.println(invoiceNo);
System.out.println(BillRepository.findByinvoiceNo(invoiceNo));
return BillRepository.findByinvoiceNo(invoiceNo).map(bills -> {
buyBill.setBill(bills);
buyBillRepository.save(buyBill);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}"); return mv;
}).orElseThrow(() -> new NotFoundException("Invoice No not found!"));
}
}
抛出这个异常: 5 Hibernate:选择bill0_.id作为id1_0_,bill0_.billing_date作为billing_2_0_,bill0_.credibility_status作为credibil3_0_,bill0_.due_amount作为due_amou4_0_,bill0_.interest_rate作为interest5_0_,bill0_.note_amount作为note6_0_amount,bill0_。 ,bill0_.total_amount如total_am9_0_,bill0_.total_discount_amount如total_d10_0_,bill0_.totalgstamount如totalgs11_0_,bill0_.total_interest_amount如total_i12_0_,bill0_.customer_id如custome15_0_,bill0_.guarantor_name如guarant13_0_,bill0_.invoice_no从票据invoice14_0_ bill0_其中bill0_.invoice_no = ? 可选.empty Hibernate:选择bill0_.id作为id1_0_,bill0_.billing_date作为billing_2_0_,bill0_.credibility_status作为credibil3_0_,bill0_.due_amount作为due_amou4_0_,bill0_.interest_rate作为interest5_0_,bill0_.note_amount作为note6_0_amount,bill0_。 ,bill0_.total_amount如total_am9_0_,bill0_.total_discount_amount如total_d10_0_,bill0_.totalgstamount如totalgs11_0_,bill0_.total_interest_amount如total_i12_0_,bill0_.customer_id如custome15_0_,bill0_.guarantor_name如guarant13_0_,bill0_.invoice_no从票据invoice14_0_ bill0_其中bill0_.invoice_no = ? 2021-01-27 16:58:05.945 WARN 7652 --- [nio-8083-exec-9] .w.s.m.a.ResponseStatusExceptionResolver:已解决 [com.alpha.demo.exception.NotFoundException:未找到发票!] 休眠:选择customer0_.id为id1_3_0_,customer0_.aadhaar_no为aadhaar_2_3_0_,customer0_.address为address3_3_0_,customer0_.create_date为create_d4_3_0_,customer0_.full_name为full_nam5_3_0_,customer0_.guarantor为guaranto6_3_0_,customer0_.mobile_no为mobile_n7_3_0_,customer0_.note为note8_3_0_,customer0_.photos as photos9_3_0_,customer0_.unique_id as unique_10_3_0_ from customers customer0_ where customer0_.id=? 休眠:插入账单(billing_date、credit_status、due_amount、interest_rate、note、paid_amount、status、total_amount、total_discount_amount、totalgstamount、total_interest_amount、customer_id、guarantor_name、invoice_no)值(?,?,?,?,?,?, ?,?,?)
主要问题::
简而言之,当 bill 和buybill 同时保存时,"BillRepository.findById(InvoiceNo)" 中的 Bill id 为空。
解决方法
我注意到在 Bill
中,您在 invoiceId
上有 @generatedValue。我认为您不能在非 @Id 字段上使用 @generatedValue。见this post。
我假设此时您的异常发生了?
// return BillRepository.findById(InvoiceNo).map(bills -> {
// buyBill.setBill(bills);
// buyBillRepository.save(buyBill);
// ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}"); return mv;
// }).orElseThrow(() -> new NotFoundException("Invoice No not found!"));
如果是这样,那么您尝试通过 id (Bill
) 查找 BillRepository.findById
,但提供 invoiceNo
而不是具体的 id
repository.findById
指的是 @Id
注释列。在你的情况下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
因此您需要使用/实现方法 findByInvoiceNo
以通过提供的 Bill
而不是 invoiceNo
获取具体的 findById
编辑
您的账单存储库应包含此方法
public interface BillRepository extends JpaRepository<Bill,Long> {
Bill findByInvoiceNo(String invoiceNo);
}
然后
return BillRepository.findB<InvoiceNo(InvoiceNo).map(bills -> {
buyBill.setBill(bills);
buyBillRepository.save(buyBill);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}"); return mv;
}).orElseThrow(() -> new NotFoundException("Invoice No not found!"));
编辑 #2
@PostMapping(value="/customers/{customerId}/bills/{invoiceNo}/buyBills",produces="application/json",consumes="application/json")
@ResponseBody
public ModelAndView addBuyBillRequest(@PathVariable Long customerId,@PathVariable Long invoiceNo,@Valid @RequestBody BuyBill buyBill){
System.out.println(invoiceNo);
System.out.println(BillRepository.findByinvoiceNo(invoiceNo));
return BillRepository.findByinvoiceNo(invoiceNo).map(bills -> {
buyBill.setBill(bills);
buyBillRepository.save(buyBill);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}"); return mv;
}).orElseThrow(() -> new NotFoundException("Invoice No not found!"));
}
该不该
return BillRepository.findByinvoiceNo(invoiceNo).map(bills -> {
bills.addBuyBill(buyBill);
billsRepository.save(bills);
在 Bill 类中:
public class Bill implements Serializable {
public void addBuyBill(BuyBill buyBill) {
this.BuyBill.add(buyBill);
buyBill.setBill(this)
}
}
这部分也一样
return customerRepository.findById(customerId) .map(customer -> {
bill.setCustomer(customer);
BillRepository.save(bill);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}");
return mv;
}).orElseThrow(() -> new NotFoundException("Customer not found!"));
}
由于客户没有或持有更多账单,您需要像以前一样添加同步方法:
return customerRepository.findById(customerId) .map(customer -> {
customer.addBill(bill);
CustomerRepository.save(customer);
ModelAndView mv = new ModelAndView("redirect:/cust/customersBuyBill/{customerId}");
return mv;
}).orElseThrow(() -> new NotFoundException("Customer not found!"));
}
在客户中
public class Customer implements Serializable {
public void addBill(Bill newBill) {
this.Bill.add(newBill);
newBill.setCustomer(this)
}
}
当您使用双向关联时,您应该保持它们同步。否则实体的状态转换可能不起作用。
抱歉长期调查。但是代码很难识别。
您绝对应该考虑进行一些重构。但这超出了这个问题的范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。