2013-02-02 2 views
1

DB의 표시 데이터 소스에 문제가 있습니다. ID (외래 키)를 표시하고 싶다면 모든 것이 잘 작동하지만 diaplay 이름을 원합니다.DB에서 외래 키가있는 DB에서 목록보기

근무 좋은 표시 부서 ID :

<c:if test="${!empty contactList}"> 
    <table class="data"> 
     <tr> 
      <th>First name</th> 
      <th>Last name</th> 
      <th>Email</th> 
      <th>Telephone</th> 
      <th>Department</th> 
      <th>&nbsp;</th> 
     </tr> 
     <c:forEach items="${contactList}" var="contact"> 
      <tr> 
       <td>${contact.firstname}</td> 
       <td>${contact.lastname}</td> 
       <td>${contact.email}</td> 
       <td>${contact.telephone}</td> 
       <td>${contact.department.id}</td> 


      <!-- <td><a href="delete/${contact.id}.html">delete</a></td>--> 
      <td> 
       &nbsp;<a href="updateContact.do?id=${contact.id}">Edit</a> 
       &nbsp;&nbsp;<a href="javascript:deleteContact('deleteContact.do?id=${contact.id}');">delete</a> 

      </td> 

      </tr> 

내가 원하는 :

<td>${contact.department.name}</td> 

컨트롤러 : 외래 키와

@RequestMapping("/showContacts") 
    public String listContacts(Map<String, Object> map) { 

     User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
     String name = user.getUsername();  
     map.put("username", name); 
     map.put("contact", new Contact());  
    // map.put("department", new Department()); 
     map.put("contactList", contactService.listContact()); 

     return "showContacts"; 
    } 

법인 :

package pl.ivmx.contact.form; 



import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

import pl.ivmx.department.form.Department; 

@Entity 
@Table(name="CONTACTS") 
public class Contact { 

    @Id 
    @Column(name="ID") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Integer id; 

    @Column(name="FIRSTNAME") 
    private String firstname; 

    @Column(name="LASTNAME") 
    private String lastname; 

    @Column(name="EMAIL") 
    private String email; 

    @Column(name="TELEPHONE") 
    private int telephone; 


    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "Department_ID", nullable = false) 
    private Department department; 


    public String getEmail() { 
     return email; 
    } 
    public int getTelephone() { 
     return telephone; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public void setTelephone(int telephone) { 
     this.telephone = telephone; 
    } 
    public String getFirstname() { 
     return firstname; 
    } 
    public String getLastname() { 
     return lastname; 
    } 
    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 
    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 
    public Department getDepartment() { 
     return department; 
    } 
    public void setDepartment(Department department) { 
     this.department = department; 
    } 

} 
01 23,516,

두 번째 엔티티 :

package pl.ivmx.department.form; 

import java.io.Serializable; 
import java.util.HashSet; 
import java.util.Set; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.OneToMany; 

import pl.ivmx.contact.form.Contact;; 

@Entity 
@Table(name = "department") 
public class Department implements Serializable{ 

    private int id; 
    private String name; 
    private Set<Contact> contact = new HashSet<Contact>(); 


    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "Department_ID") 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @Column(name = "Name") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "department") 
    public Set<Contact> getContact() { 
     return contact; 
    } 
    public void setContact(Set<Contact> contact) { 
     this.contact = contact; 
    } 


} 

ERROR :

FeachType.EAGER :

type Exception report 

message javax.el.ELException: Error reading 'name' on type pl.ivmx.department.form.Department_$$_javassist_0 

description The server encountered an internal error (javax.el.ELException: Error reading 'name' on type pl.ivmx.department.form.Department_$$_javassist_0) that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: javax.el.ELException: Error reading 'name' on type pl.ivmx.department.form.Department_$$_javassist_0 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    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:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

root cause 

javax.el.ELException: Error reading 'name' on type pl.ivmx.department.form.Department_$$_javassist_0 
    javax.el.BeanELResolver.getValue(BeanELResolver.java:98) 
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspx_meth_c_005fforEach_005f0(showContacts_jsp.java:368) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspx_meth_c_005fif_005f2(showContacts_jsp.java:318) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspService(showContacts_jsp.java:137) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    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:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

root cause 

org.hibernate.LazyInitializationException: could not initialize proxy - no Session 
    org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132) 
    org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174) 
    org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) 
    pl.ivmx.department.form.Department_$$_javassist_0.getName(Department_$$_javassist_0.java) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    javax.el.BeanELResolver.getValue(BeanELResolver.java:87) 
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67) 
    org.apache.el.parser.AstValue.getValue(AstValue.java:169) 
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) 
    org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspx_meth_c_005fforEach_005f0(showContacts_jsp.java:368) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspx_meth_c_005fif_005f2(showContacts_jsp.java:318) 
    org.apache.jsp.WEB_002dINF.pages.showContacts_jsp._jspService(showContacts_jsp.java:137) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    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:722) 
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
    org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:262) 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1180) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:950) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
    org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
    org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) 
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
+0

무엇이 오류입니까? –

+0

'org.apache.jasper.JasperException : \t \t \t \t \t $ {} contact.lastname 36 : 예외 라인 38 35 처리 JSP 페이지 /WEB-INF/pages/showContacts.jsp 발생 \t \t \t \t \t $ {} contact.email \t \t \t \t $ {} contact.telephone 38 : \t \t \t \t \t $ {contact.department.name} 39 : 40 : \t \t \t 스택 트레이스 : \t org.apache.jasper.servlet.JspServletWrapper.handleJspException (JspServletWrapper.java:568) \t org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:470) \t org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet.java:390)' – Patrick

+0

는 전체 스택 트레이스와 질문을 업데이트 할 수 있습니다 ? –

답변

3

여기서 문제는 당신이 느리게 반입되고있는 빈의 속성에 액세스하려고하는 것입니다. 뷰가 렌더링되면 데이터베이스와의 세션이 이미 닫힙니다. 이 작업을 수행 할 수있을하려면이를 구현하는 방법을 볼이 example를 읽고 고려해 볼 수 있습니다, FetchType.EAGER에 유형을 가져 오거나 당신이 당신의 JPA 공급자로 최대 절전 모드를 사용하는 경우 LAZY

로 유지하려는 경우 Open Session In View Pattern를 사용하여 설정 보기 패턴의 세션을 Spring MVCHibernate으로 엽니 다.

+1

또는 해당 부서의 연락처를 가져 오는 쿼리를 사용하십시오. –

+0

이것은 또한 실행 가능한 해결책입니다. –

+0

나는'FetchType.LAZY'를'FetchType.EAGER'로 바꾸고 문제도 같습니다. – Patrick