2015-06-22 56 views
2

我遇到了問題,可能與我的邏輯有關。 我想在一個列表中顯示使用hibernate hql的mysql中兩個表的信息。我有兩個實體,客戶和項目。 客戶可以有多個項目,但項目只能分配給一個客戶。從mysql連接兩個表並在一個JSP列表中顯示信息

因此,我的客戶端客戶端在我的項目實體中連接到客戶端。

我想列出與此格式的所有項目:

projectsID |客戶名稱| Proj名稱| Proj desc | Proj日期開始|等等......

所以我試圖讓客戶名稱,顯示的不是clientsIDclients

在HQL我已經成功地得到我所需要的,但我不知道如何把這些信息在我的jsp表。

JSP代碼片段:

<div class="table-responsive"> 
    <table class="table table-hover"> 
     <thead> 
     <tr> 
      <th>ID</th> 
      <th>Client ID</th> 
      <th>Name</th> 
      <th>Description</th> 
      <th>Status</th> 
      <th>Priority</th> 
      <th>Date Started</th> 
      <th>Date End</th> 
      <th>Price</th> 
     </tr> 
     </thead> 
     <tbody> 
     <c:forEach var="user" items="${test}" varStatus="status"> 

      <tr> 
       <td>${status.index+1}</td> 
       <td>${user.clName}</td> 
       <td>${user.projName}</td> 
       <td>${user.projDescription}</td> 
       <td>${user.projDatestarted}</td> 
       <td>${user.projDateend}</td> 
       <td>${user.projPrice}</td> 
       <td><a href="edit?id=${user.idProjects}" class="btn btn-primary btn-sm"><span class="glyphicon glyphicon-edit"></span> Edit</a> 
       <a href="delete?id=${user.idProjects}" class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-remove"></span> Delete</a></td> 
      </tr> 

     </c:forEach> 
     </tbody> 
    </table> 

ProjectDAOImpl.java:

public ProjectsDAOImpl(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

@Override 
@Transactional 
public List<Projects> list() { 

    String hql = "select projects.idProjects as ProjectID, clients.clName as ClientName, projects.projName as ProjectName," + 
      "  projects.projDescription as ProjectDescription, projects.projPriority as Priority, projects.projStatus as Status, projects.projDatestarted as DateStarted, projects.projDateend as DateEnd," + 
      "  projects.projPrice as Price from Clients clients, Projects projects where clients.idClients = projects.clientsIdClients"; 
    Query query = sessionFactory.getCurrentSession().createQuery(hql); 
    @SuppressWarnings("unchecked") 
    List<Projects> listProject = (List<Projects>) query.list(); 
    return listProject; 
} 

和ProjectsController.java:

@RequestMapping("/") 
public ModelAndView handleRequest() throws Exception{ 
    List<Projects> listProjects = projectsDao.list(); 
    ModelAndView model = new ModelAndView("ProjectList"); 
    model.addObject("projectList", listProjects); 
    return model; 
} 

我的tomcat的錯誤是

java.lang.NumberFormatException: For input string: "ProjectID" 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
java.lang.Integer.parseInt(Integer.java:492) 
java.lang.Integer.parseInt(Integer.java:527) 
javax.el.ArrayELResolver.coerce(ArrayELResolver.java:159) 
javax.el.ArrayELResolver.getValue(ArrayELResolver.java:45) 
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104) 
org.apache.el.parser.AstValue.getValue(AstValue.java:183) 
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185) 
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:1026) 
org.apache.jsp.WEB_002dINF.views.ProjectList_jsp._jspx_meth_c_005fforEach_005f0(ProjectList_jsp.java:137) 
org.apache.jsp.WEB_002dINF.views.ProjectList_jsp._jspService(ProjectList_jsp.java:88) 
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:209) 
org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:267) 
org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1217) 
org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1005) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:952) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 

完整的錯誤日誌在引擎收錄:http://pastebin.com/Md4R1uCe

所以,我的問題是,如何從HQL在JSP中訪問數據並顯示它,我在這些數據丟失的流動。

感謝

編輯:

Projects.java

package rs.ftn.ais.model; 
import com.sun.xml.internal.bind.v2.model.core.ID; 
import rs.ftn.ais.model.ProjectsPK; 

import javax.persistence.*; 
import java.sql.Date; 

/** 
* Created by Goran on 6/19/2015. 
*/ 
@Entity 
@Table(name = "projects", schema = "", catalog = "freelancepm_db") 
@IdClass(ProjectsPK.class) 
public class Projects { 
    private int idProjects; 
    private String projName; 
    private String projDescription; 
    private String projStatus; 
    private String projPriority; 
    private Date projDatestarted; 
    private Date projDateend; 
    private String projPrice; 
    private int clientsIdClients; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "idPROJECTS", nullable = false, insertable = true, updatable = true) 
    public int getIdProjects() { 
     return idProjects; 
    } 

    public void setIdProjects(int idProjects) { 
     this.idProjects = idProjects; 
    } 

    @Basic 
    @Column(name = "PROJ_NAME", nullable = false, insertable = true, updatable = true, length = 45) 
    public String getProjName() { 
     return projName; 
    } 

    public void setProjName(String projName) { 
     this.projName = projName; 
    } 

    @Basic 
    @Column(name = "PROJ_DESCRIPTION", nullable = true, insertable = true, updatable = true, length = 45) 
    public String getProjDescription() { 
     return projDescription; 
    } 

    public void setProjDescription(String projDescription) { 
     this.projDescription = projDescription; 
    } 

    @Basic 
    @Column(name = "PROJ_STATUS", nullable = true, insertable = true, updatable = true, length = 45) 
    public String getProjStatus() { 
     return projStatus; 
    } 

    public void setProjStatus(String projStatus) { 
     this.projStatus = projStatus; 
    } 

    @Basic 
    @Column(name = "PROJ_PRIORITY", nullable = true, insertable = true, updatable = true, length = 45) 
    public String getProjPriority() { 
     return projPriority; 
    } 

    public void setProjPriority(String projPriority) { 
     this.projPriority = projPriority; 
    } 

    @Basic 
    @Column(name = "PROJ_DATESTARTED", nullable = true, insertable = true, updatable = true) 
    public Date getProjDatestarted() { 
     return projDatestarted; 
    } 

    public void setProjDatestarted(Date projDatestarted) { 
     this.projDatestarted = projDatestarted; 
    } 

    @Basic 
    @Column(name = "PROJ_DATEEND", nullable = true, insertable = true, updatable = true) 
    public Date getProjDateend() { 
     return projDateend; 
    } 

    public void setProjDateend(Date projDateend) { 
     this.projDateend = projDateend; 
    } 

    @Basic 
    @Column(name = "PROJ_PRICE", nullable = false, insertable = true, updatable = true, length = 45) 
    public String getProjPrice() { 
     return projPrice; 
    } 

    public void setProjPrice(String projPrice) { 
     this.projPrice = projPrice; 
    } 

    @Id 
    @Column(name = "CLIENTS_idCLIENTS", nullable = false, insertable = true, updatable = true) 
    public int getClientsIdClients() { 
     return clientsIdClients; 
    } 

    public void setClientsIdClients(int clientsIdClients) { 
     this.clientsIdClients = clientsIdClients; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Projects that = (Projects) o; 

     if (clientsIdClients != that.clientsIdClients) return false; 
     if (idProjects != that.idProjects) return false; 
     if (projDateend != null ? !projDateend.equals(that.projDateend) : that.projDateend != null) return false; 
     if (projDatestarted != null ? !projDatestarted.equals(that.projDatestarted) : that.projDatestarted != null) 
      return false; 
     if (projDescription != null ? !projDescription.equals(that.projDescription) : that.projDescription != null) 
      return false; 
     if (projName != null ? !projName.equals(that.projName) : that.projName != null) return false; 
     if (projPrice != null ? !projPrice.equals(that.projPrice) : that.projPrice != null) return false; 
     if (projPriority != null ? !projPriority.equals(that.projPriority) : that.projPriority != null) return false; 
     if (projStatus != null ? !projStatus.equals(that.projStatus) : that.projStatus != null) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = idProjects; 
     result = 31 * result + (projName != null ? projName.hashCode() : 0); 
     result = 31 * result + (projDescription != null ? projDescription.hashCode() : 0); 
     result = 31 * result + (projStatus != null ? projStatus.hashCode() : 0); 
     result = 31 * result + (projPriority != null ? projPriority.hashCode() : 0); 
     result = 31 * result + (projDatestarted != null ? projDatestarted.hashCode() : 0); 
     result = 31 * result + (projDateend != null ? projDateend.hashCode() : 0); 
     result = 31 * result + (projPrice != null ? projPrice.hashCode() : 0); 
     result = 31 * result + clientsIdClients; 
     return result; 
    } 
} 

布拉尼斯拉夫 - idProjects是INT

redflair - 對不起,這裏是Projects.java

編輯2

我已經使用ProjectsFormatted.java擴展Projects.java,所以我可以使用客戶端名稱而不是客戶端ID來創建對象。

ProjectsFormatted.java 公共類ProjectsFormatted擴展項目{

private String clName; 

public String getClName() { 
    return clName; 
} 

public void setClName(String clName) { 
    this.clName = clName; 
} 
} 

ProjectsFormattedDAO.java

package rs.ftn.ais.dao; 

import org.springframework.web.servlet.ModelAndView; 
import rs.ftn.ais.model.ProjectsFormatted; 

import java.util.List; 


public interface ProjectsFormattedDAO extends ProjectsDAO { 

public List<ProjectsFormatted> listProjects(); 

} 

ProjectsFormattedDAOImpl。java的

public class ProjectsFormattedDAOImpl extends ProjectsDAOImpl implements ProjectsFormattedDAO { 

@Autowired 
private SessionFactory sessionFactory; 

public ProjectsFormattedDAOImpl(){ 

} 

public ProjectsFormattedDAOImpl(SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

@Override 
@Transactional 
public List<ProjectsFormatted> listProjects() { 
    String hql = "select projects.idProjects, clients.clName, projects.projName, projects.projDescription, projects.projPriority, projects.projStatus, projects.projDatestarted, projects.projDateend, projects.projPrice from Clients clients, Projects projects where clients.idClients = projects.clientsIdClients"; 

    Query query = sessionFactory.getCurrentSession().createQuery(hql); 

    List<ProjectsFormatted> listProjects = (List<ProjectsFormatted>) query.list(); 
    return listProjects; 

} 
} 

我的控制器現在看起來是這樣的:

@RequestMapping("/") 
public ModelAndView handleRequest() throws Exception{ 
    //List<Projects> listProjects = projectsDao.list(); 
    ModelAndView model = new ModelAndView("ProjectList"); 
    List<ProjectsFormatted> listProjects = projectsFormattedDao.listProjects(); 
    model.addObject("test", listProjects); 
    return model; 
} 

在調試過程中我看到,在控制器listProjects填充了數據,但使用model.addObject(「測試」,listProjects)不執行任何操作,並且我無法訪問JSP中的數據。

運行現場之後,我得到Tomcat的錯誤: java.lang.NumberFormatException:對於輸入字符串: 「列表CLNAME」

再次,完整的錯誤日誌在Pastebin

Screenshot of my debugging. Right before adding object to ModelAndView

+0

你怎麼申報'idProjects'?它是什麼類型的數據類型? –

+0

請發佈您的'Projects'對象 –

回答

0

在你的DAO你正在建立一個包含所有對象Project的列表。請通過打印所有idProjects來檢查您是否擁有所需的全部內容。如果沒有,那麼你從你的數據庫中提取數據的方式會遇到一些問題。也許你應該考慮根據你的映射在你的查詢中設置你的別名。

然後,在您的JSP中,您嘗試訪問不存在於該對象中的字段。在Projects類中,我看不到該字段的ProjectID。請使用此名稱而不是您在查詢中選擇的別名訪問您的字段。

<td>${user.idProjects}</td> 

回來,如果你仍然在你的數據庫中的錯誤

+0

謝謝你指出。我的確曾嘗試在Projects對象中填充客戶名稱,但沒有該字段。所以,我創建了新的Model,ProjectsFormatted,它擴展了我的Projects類和字段字段clName。我會用新課程更新我的問題。 在debbuging期間,我可以看到在控制器中,我可以獲取正確的數據,但是我無法將它傳遞給ModelAndView對象,因此我無法在我的jsp中顯示它們。 –

+0

錯誤可能不是我認爲的那個。請你嘗試[本線程]的接受答案(https://stackoverflow.com/questions/27803379/exception-numberformatexception-for-input-string-in-jsp-list-page)。 Hibernate獲取他的數據時似乎有錯誤,但沒有找到正確的類型。可能需要使用標量。對於我的個人信息,請檢查您的數據庫中的數據類型。我認爲Hibernate會獲取與db類型相對應的數據。也許有分歧 – RPresle

相關問題