OrderItem.java
package com.rbctcsworld.ecommerce.order;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.math.BigDecimal;
/** Price, SKU and name are copied at purchase time, so later product edits never change an old order. */
@Entity
@Table(name = "order_items")
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "order_id", nullable = false)
private CustomerOrder order;
@Column(name = "product_id", nullable = false)
private Long productId;
@Column(nullable = false, length = 100)
private String sku;
@Column(name = "product_name", nullable = false)
private String productName;
@Column(name = "unit_price", nullable = false, precision = 12, scale = 2)
private BigDecimal unitPrice;
@Column(nullable = false)
private int quantity;
@Column(name = "line_total", nullable = false, precision = 12, scale = 2)
private BigDecimal lineTotal;
protected OrderItem() {
}
public OrderItem(Long productId, String sku, String productName, BigDecimal unitPrice, int quantity) {
this.productId = productId;
this.sku = sku;
this.productName = productName;
this.unitPrice = unitPrice;
this.quantity = quantity;
this.lineTotal = unitPrice.multiply(BigDecimal.valueOf(quantity));
}
void attachTo(CustomerOrder order) {
this.order = order;
}
public Long getId() { return id; }
public Long getProductId() { return productId; }
public String getSku() { return sku; }
public String getProductName() { return productName; }
public BigDecimal getUnitPrice() { return unitPrice; }
public int getQuantity() { return quantity; }
public BigDecimal getLineTotal() { return lineTotal; }
}