0

I have this jsp code .

<c:forEach var="item" items="${UsersList}">
 <tr>
 <td><c:out value="${item.userId}" /></td>
 <td><c:out value="${item.userName}" /></td>
 <td><c:out value="${item.car}" /></td>  //Here , I am getting exception
 </tr>
 </c:forEach>

The UserList consists of an attribute called "car" of datatype "Car"

Pojo Class class for Users:

@Entity
@Table(name = "Users")
public class Users implements java.io.Serializable {

private int userId;
private Car car;
private Groups groupId;
private UserType userType;
private String userName;

//getters and setters
}

I am using Spring MVC Framework. On page load my app should show a table with the list of users . In controller I am querying for the list of users and I am adding it to the ModelAndView object

Controller code:

List<Users> userList = service.getUserList();  //this will get list of users
//System.out.println("Userlist ==" +userList.size()); 
mv.addObject("UsersList" , usersList);
//skipped remaining code

When I tried without car (tabledata tag) JSP is running without exception and showing the users list in the table . If I try to add car (tabledata tag) then I am getting an exception

HTTP Status 500 - An exception occurred processing JSP page /WEB-INF/pages/CreateUser.jsp at line 199 
org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/pages/CreateUser.jsp at line 199

196:<tr>
197:<td><c:outvalue="${item.userId}" /></td>
198:<td><c:out value="${item.userName}" /></td>
199:<!-- <td><c:out value="${item.car}" /></td> --> 
200:<td><c:out value="${item.modifiedDate}" /></td>
201:</tr>
202:</c:forEach>                                            


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra    pper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4    70)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutput    Model(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:3    03)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.j    ava:1244)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(Disp    atcherServlet.java:1027)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServl    et.java:971)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServle    t.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkSer    vlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java    :861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.ja    va:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

org.hibernate.LazyInitializationException: could not initialize proxy - no  Session
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:149)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:195)
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
com.bdp.pojo.Role_$$_javassist_11.toString(Role_$$_javassist_11.java)
org.apache.taglibs.standard.tag.common.core.OutSupport.out(OutSupport.java:178)
org.apache.taglibs.standard.tag.common.core.OutSupport.doStartTag(OutSupport.java:99)
org.apache.jsp.WEB_002dINF.pages.CreateUser_jsp._jspx_meth_c_005fout_005f2(CreateUser_jsp.java:667)
org.apache.jsp.WEB_002dINF.pages.CreateUser_jsp._jspx_meth_c_005fforEach_005f0(CreateUser_jsp.java:591)
org.apache.jsp.WEB_002dINF.pages.CreateUser_jsp._jspService(CreateUser_jsp.java:264)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:168)
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303)
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1244)
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1027)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:971)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.springframeweb.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
no1
  • 128
  • 11

2 Answers2

3

Since you are using hibernate lazy initialization, whenever you return the main object to the JSP it will try to fetch sub classes. And this wont happen because session would be closed.

Therefore change your fetching strategy to the Eager:

On your car's getter method:

@OneToOne(fetch=FetchType.EAGER)

This will cause fetching car immediatly when you fetch the main class.

To make it on query:

 List<Users> items = session.createCriteria(Users.class)
                    .setFetchMode("car", FetchMode.JOIN).
                    .createAlias("car", "car").
                    .list();
Sercan Ozdemir
  • 4,641
  • 3
  • 34
  • 64
1

You receive error LazyInitializationException. Users objects in a lazy Car object. service.getuserlist(); method can bring in by fetch the Car objects.

Fetching Strategies

FetchType.LAZY is on demand

FetchType.EAGER is immediate

@OneToOne(fetch=FetchType.EAGER) when you do want to take the user object as object the car all the time.

service.getUserList () please write.

EDIT :

Example getUserList method:

public List<Users> getUserList(){
    String sql = " SELECT user from Users user left join fetch user.car ";
    Query query = entityManager.createQuery(sql);
    return query.getResultList();
}
ooozguuur
  • 3,396
  • 2
  • 24
  • 42