使用弹簧 crud 存储库保持一对多关系



我正在尝试保留一个包含付款实体列表的订单实体。保存操作是级联的,因此保存订单将保存其中的所有付款。订单表具有订单ID,价格,数量,付款表具有订单ID,付款ID,值,创建和更新。保存订单时,订单会随着订单ID自动生成而完美保存,但对于付款,除了orderid为空之外,一切都很好。订单表中的订单 ID 应分配给付款表中的订单 ID。请帮忙。

序.java

@Entity
@Table(schema="public")
@NamedQuery(name="Order.findAll", query="SELECT o FROM Order o")
public class Order implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int orderid;
private Integer price;
private Integer qty;
//bi-directional many-to-one association to Payment
@OneToMany(mappedBy="order", fetch=FetchType.EAGER,cascade=CascadeType.ALL)
private List<Payment> payments;
public Order() {
}
public Integer getPrice() {
return this.price;
}
public void setPrice(Integer price) {
this.price = price;
}
public Integer getQty() {
return this.qty;
}
public void setQty(Integer qty) {
this.qty = qty;
}
public int getOrderid() {
return orderid;
}
public void setOrderid(int orderid) {
this.orderid = orderid;
}
public List<Payment> getPayments() {
return this.payments;
}
public void setPayments(List<Payment> payments) {
this.payments = payments;
}
public Payment addPayment(Payment payment) {
if(payment!=null){
payment.setOrder(this);
getPayments().add(payment);         
}       
return payment;
}
public Payment removePayment(Payment payment) {
getPayments().remove(payment);
payment.setOrder(null);
return payment;
}
@Override
public String toString() {
return "Order [orderid=" + orderid + ", price=" + price + ", qty=" + qty + ", payments=" + payments + "]";
}
}

付款.java

@Entity
@Table(schema="public")
@NamedQuery(name="Payment.findAll", query="SELECT p FROM Payment p")
public class Payment implements Serializable {
private static final long serialVersionUID = 1L;
@Temporal(TemporalType.DATE)
private Date created;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer paymentid;
@Temporal(TemporalType.DATE)
private Date updated;
private Integer value;
//bi-directional many-to-one association to Order
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="orderid", referencedColumnName="orderid")
private Order order;
public Payment() {
}
public Date getCreated() {
return this.created;
}
public void setCreated(Date created) {
this.created = created;
}
public Integer getPaymentid() {
return this.paymentid;
}
public void setPaymentid(Integer paymentid) {
this.paymentid = paymentid;
}
public Date getUpdated() {
return this.updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
public Integer getValue() {
return this.value;
}
public void setValue(Integer value) {
this.value = value;
}
public Order getOrder() {
return this.order;
}
public void setOrder(Order order) {
this.order = order;
}
@Override
public String toString() {
return "Payment [created=" + created + ", paymentid=" + paymentid + ", updated=" + updated + ", value=" + value
+ ", order=" + order + "]";
}
}

订单控制器.java

@RestController
public class OrderController {
@Autowired
OrderService orderService;
@Autowired
PaymentService paymentService;  
@RequestMapping(method=RequestMethod.PUT, value="/order")
public void createOrder(@RequestBody Order o){
System.out.println(o);
orderService.createOrUpdateOrder(o);
System.out.println("Order Created");
}
@RequestMapping(method=RequestMethod.POST, value="/order")
public void updateOrder(@RequestBody Order o){
orderService.createOrUpdateOrder(o);
System.out.println("Order Updated");
}
@RequestMapping(method=RequestMethod.DELETE, value="/order")
public void deleteOrder(@RequestBody Order o){
orderService.deleteOrder(o);
System.out.println("Order Deleted");
}
@RequestMapping(method=RequestMethod.PUT, value="/payment")
public void createPayment(@RequestBody Order o){
paymentService.createOrUpdatePayments(o);
System.out.println("Payment Created");
}
@RequestMapping(method=RequestMethod.POST, value="/payment")
public void updatePayment(@RequestBody Order o){
paymentService.createOrUpdatePayments(o);
System.out.println("Payment Updated");
}
@RequestMapping(method=RequestMethod.DELETE, value="/payment")
public void deletePayment(@RequestBody Order o){
paymentService.deletePayments(o);;
System.out.println("Payment Deleted");
}
}

订单服务.java

@Service
public class OrderService {
@Autowired
OrderRepository orderRepository;
public void createOrUpdateOrder(Order o){
orderRepository.save(o);
}
public void deleteOrder(Order o){
orderRepository.delete(o.getOrderid());
}
public Order getOrderDetails(Order o){
return orderRepository.findOne(o.getOrderid());
}
}

订单存储库.java

@Repository
public interface OrderRepository extends CrudRepository<Order, Integer> {
}

输出:

订单表

订单 ID 为空的付款表

您可以在服务createOrUpdateOrder尝试此操作,并让我知道
也许你可以找到比这更好的

public void createOrUpdateOrder(Order o){
List<Payment> payments = new ArrayList<>();
for( Payment payment : order.getPayments() ) {
payment.setOrder( order );
payments.add(payment);
}
order.setPayments( payments );
orderRepository.save(o);
}

最新更新