Previously encountered this problem, too long forgotten, and today they met, recorded a long memory.
In fact, check out the data is the number of entities, indicating that the result is still isolated objects
@Test
public void testGetOrderByUserId() {
for (OrderDetail order : orderDAO.getOrderByUserId(6)) {
for (OrderItem orderItem : order.getOrderItems()) {
System.out.println(orderItem);
}
}
}
Only need to change a little bit, just a little bit, you can remove the desired data.
@Test
public void testGetOrderByUserId() {
for (OrderDetail order : orderDAO.getOrderByUserId(6)) {
for (OrderItem orderItem : order.getOrderItems()) {
System.out.println(orderItem.getId());
}
}
}
Entity class OrderDetail
/**
* 一对多关系 即一个订单内包含多个 orderItem
*/
@OneToMany(mappedBy = "orderDetail", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
Entity class OrderItem
/**
* 多对一关系 即多个orderItem对应一个订单
* 以 order_id 外键相关联
*/
@ManyToOne
@JoinColumn(name = "order_id")
private OrderDetail orderDetail;
As it can be seen with OrderDetail OrderItem many relationship, so OrderDetail to List <OrderItem> OrderItem of the stored list.
JSP also traverse it twice
<c:forEach items="${orderDetails }" var="orderDetail">
<tr>
<th scope="row">${orderDetail.getId() }</th>
<td>
<c:forEach items="${orderDetail.orderItems}" var="orderItem">
<a href="${contextRoot}/show/${orderItem.product.id}/product">
<span>${orderItem.product.name}-${orderItem.buyingPrice}元/本*${orderItem.productCount}本</span>
</a>
<br>
</c:forEach>
</td>
<td>${orderDetail.getOrderTotal() }</td>
<td>${orderDetail.getOrderCount() }</td>
<td>${orderDetail.getShipping().getAddressLineOne() }</td>
<td>${orderDetail.getShipping().getAddressLineTwo() }</td>
<td class="text-left">
<a href="#" class="btn btn-primary"><span class="glyphicon glyphicon-remove"></span></a>
<a href="#" class="btn btn-success"><span class="glyphicon glyphicon-eye-open"></span></a>
</td>
</tr>
</c:forEach>