2016-09-09 1 views
0

こんにちは私は以下の問題があります。JPA Hibernateはエンティティから1つ以上のメンバーを読み込みません(遅延ロード)

JSPファイルで読み込むために、出荷されていないオーダーのコレクションを作成する必要があります。

出荷時にコレクションに1つ以上の注文がある場合、私は例外を受け取ります: javax.el.E​​LException: 'name'を読み取る際にエラーが発生しました。タイプのentities.Customer _ $$ _ jvstf5f_1 根本的な原因: org.hibernate.LazyInitializationException:プロキシを初期化できませんでした - いいえセッション

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    if (request.getParameterValues("ship") != null) { 
     List<Order> noStockUnshippedOrders = new ArrayList<>(); 

     for (String orderId : request.getParameterValues("ship")) { 
      try { 
       Long id = Long.parseLong(orderId); 
       if (!orderService.setAsShipped(id)) { 
        noStockUnshippedOrders.add(orderService.read(id)); 
       } 
      } catch (NumberFormatException e) { 
       // IF NO LONG DO NOTHING 
      } 
     } 
     request.setAttribute("noStockUnshippedOrders", noStockUnshippedOrders); 
    } 
    getUnshippedOrders(request, response); 
    // GET ON WITH IT 
    request.getRequestDispatcher(VIEW).forward(request, response); 
} 

、これが私のJSPコードです:

<!doctype html> 
<c:forEach items='${noStockUnshippedOrders}' var='noStockUnshippedOrder'> 
      <c:url value='/orderdetail.htm' var='orderDetailURL'> 
       <c:param name='id' value="${noStockUnshippedOrder.id}" /> 
      </c:url> 
      <tr> 
       <td class="col-md-1 text-center"><a class="btn btn-danger" 
        href="<c:out value='${orderDetailURL}'/>" 
role="button">${noStockUnshippedOrder.id}</a></td> 
       <td class="col-md-1">${noStockUnshippedOrder.orderDate}</td> 
       <td class="col-md-1">${noStockUnshippedOrder.requiredDate} 
</td> 
       <td class="col-md-2">${noStockUnshippedOrder.customer.name} 
</td> 
       <td>${noStockUnshippedOrder.comments}</td> 
       <td class="col-md-2"><img 
        src="images/${noStockUnshippedOrder.status}.png">&nbsp; 

${fn:toUpperCase(fn:substring(noStockUnshippedOrder.status, 0, 1))}${fn:toLowerCase(fn:substring(noStockUnshippedOrder.status, 1, -1))} 
       </td> 
      </tr> 
     </c:forEach> 

答えて

0

確率この時点では、Hibernateセッションがクローズされているため、$ {noStockUnshippedOrder.comments}または別のオーダー属性(属性がfetch = FetchType.LAZYの場合)でエラーが発生します。

*最初の解決策は、戦略OpenSessionInViewFilter戦略を使用することです。 このリンクを参照してください:https://developer.jboss.org/wiki/OpenSessionInView

* 2番目の解決策は、サーブレットの例(または他の属性怠惰)のリストを見つけることです。

if (!orderService.setAsShipped(id)) { 
    Order order = orderService.read(id); 
    List<Comment> comments = commentService.findByOrder(order); 
    order.setComments(comments); 
    noStockUnshippedOrders.add(order); 
} 
関連する問題