[英]Unable to save Entity with OneToMany mapping using JPA
我有具有One-to-Many
关系的Order
和OrderLineItem
。 当我保存订单时,我收到 ConstraintViolationException。 下面是代码片段。
@Entity
@Table(name = "orders")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Order extends AuditModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "order_id")
@JsonProperty("order_id")
private long orderId;
private double price;
@OneToMany(mappedBy = "order",
fetch = EAGER,
cascade = CascadeType.ALL )
private Set<OrderLineItem> orderLineItems = new HashSet<>();
// scaffolding code
public void addOrderLineItem(OrderLineItem orderLineItem){
this.orderLineItems.add(orderLineItem);
orderLineItem.setOrder(this);
}
... setters, getters, toString, equals and hashcode methods
}
按订单行项目OrderLineItem
@Entity
@Table(name = "order_line_item")
@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderLineItem extends AuditModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String name;
private double price;
@ManyToOne()
@JoinColumn(name = "order_id", nullable = false)
@JsonIgnore
private Order order;
public OrderLineItem(String name, double price){
this.name = name;
this.price = price;
}
public OrderLineItem(){}
... setters, getters, toString, equals and hashcode methods
}
OrderServiceImple class
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderRepository orderRepository;
@Override
public Order createOrder(Order order) {
System.out.println("Inside the save method of Order service .... :: ");
System.out.println(order);
return this.orderRepository.save(order);
}
...
}
订单仓库
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
List<Order> findAll();
}
我正在使用OrderRepository
和OrderItemRepository
JPA 接口。
发帖请求
{
"price": 4500,
"orderLineItems": [
{
"name": "new Order Item",
"price": 4000
}
]
}
错误:
java.sql.SQLIntegrityConstraintViolationException: Column 'order_id' cannot be null
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117) ~[mysql-connector-java-8.0.19.jar:8.0.19]
我哪里错了?
JPA 没有在orderLineItems
中找到Order
,这就是为什么order_id
设置为null
的原因。 要在双向关系中保存与父级的子级,在子级实体中设置父级也要同步双方。
public Order createOrder(Order order) {
for(OrderLineItem orderLineItem : order.getOrderLineItems()) {
orderLineItem.setOrder(order);
}
return this.orderRepository.save(order);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.