@OneToMany
和CascadeType.All
无法正常工作。
这是我的代码。
'一方'
@Entity
@Table(name = "orders")
public class Order {
private long id;
private User usersByUserId;
private Collection<OrderBook> orderBooksById = new HashSet<>();
@Id
@Column(name = "id")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name = "user_id", referencedColumnName = "id", nullable = false)
public User getUsersByUserId() {
return usersByUserId;
}
public void setUsersByUserId(User usersByUserId) {
this.usersByUserId = usersByUserId;
}
@OneToMany(mappedBy = "pk.order", cascade = CascadeType.ALL)
public Collection<OrderBook> getOrderBooksById() {
return orderBooksById;
}
public void setOrderBooksById(Collection<OrderBook> orderBooksById) {
this.orderBooksById = orderBooksById;
}
}
和“很多”方面。
@Entity
@Table(name = "order_book")
public class OrderBook {
private OrderBookPK pk = new OrderBookPK();
private int num;
@EmbeddedId
public OrderBookPK getPk() {
return pk;
}
public void setPk(OrderBookPK pk) {
this.pk = pk;
}
@Transient
public Book getBook(){
return getPk().getBook();
}
public void setBook(Book book){
getPk().setBook(book);
}
@Transient
public Order getOrder(){
return getPk().getOrder();
}
public void setOrder(Order order){
getPk().setOrder(order);
}
@Basic
@Column(name = "num")
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
@Embeddable
public class OrderBookPK implements Serializable {
private Order order;
private Book book;
@ManyToOne
@JoinColumn(name="order_id", referencedColumnName = "id", nullable = false)
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
@ManyToOne
@JoinColumn(name="book_id", referencedColumnName = "id", nullable = false)
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
}
我在我的服务中使用它。
@Transactional
public void addOrder(OrderFrom orderFrom) {
Order order = new Order();
User user = orderForm.getUser();
order.setUsersByUserId(user);
for (OrderFrom.OrderItem item: orderFrom.getOrderItems()){
Book book = item.getBook();
OrderBook orderBook = new OrderBook();
orderBook.setOrder(order);
orderBook.setBook(book);
orderBook.setNum(item.getNumber());
order.getOrderBooksById().add(orderBook);
}
orderDao.addOrder(order);
}
我预计它会像cascade所期望的那样保存秩序以及它的子节点。但是当我运行它时,只保存订单而没有抛出异常。
Hibernate: insert into orders (user_id, id) values (?, ?)