Java 从mysql连接两个表并在一个JSP列表中显示信息

Java 从mysql连接两个表并在一个JSP列表中显示信息,java,mysql,hibernate,jsp,spring-mvc,Java,Mysql,Hibernate,Jsp,Spring Mvc,我的逻辑有问题。 我想在一个列表中使用hibernate hql显示mysql中两个表中的信息。我有两个实体,客户和项目。 客户端可以有多个项目,但项目仅分配给一个客户端 因此,我的项目实体中有clientsIDclients来连接客户机 我想列出所有具有此格式的项目: 项目SID |客户名称|项目名称|项目描述|项目开始日期|等 所以我试图让客户端名称显示出来,而不是ClientSidClient 在hql中,我设法得到了我需要的东西,但我不知道如何将这些信息放入我的jsp表中 JSP代码段:

我的逻辑有问题。 我想在一个列表中使用hibernate hql显示mysql中两个表中的信息。我有两个实体,客户和项目。 客户端可以有多个项目,但项目仅分配给一个客户端

因此,我的项目实体中有clientsIDclients来连接客户机

我想列出所有具有此格式的项目:

项目SID |客户名称|项目名称|项目描述|项目开始日期|等

所以我试图让客户端名称显示出来,而不是ClientSidClient

在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>
粘贴站的完整错误日志:

所以,我的问题是,如何从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;
    }
}
Branislav-IDP项目是完整的

redflair-抱歉,这里是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;
    }
}
编辑2

我已经用projectsformated.java扩展了Projects.java,所以我可以用客户机名称而不是客户机ID创建对象

projectsformated.java 公共类项目格式扩展项目{

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();

}
包rs.ftn.ais.dao;
导入org.springframework.web.servlet.ModelAndView;
导入已格式化的rs.ftn.ais.model.Projects;
导入java.util.List;
公共接口项目FormattedDAO扩展项目DAO{
公共列表列表项目();
}
projectsformattedaoimpl.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;

}
}
公共类projectsformateddaoimpl扩展ProjectsDAOImpl实现projectsformateddao{
@自动连线
私人会话工厂会话工厂;
公共项目格式daoimpl(){
}
公共项目格式DAOIMPL(SessionFactory SessionFactory){
this.sessionFactory=sessionFactory;
}
@凌驾
@交易的
公共列表项目(){
String hql=“选择projects.idProjects,clients.clName,projects.projName,projects.projDescription,projects.projPriority,projects.projStatus,projects.projDatestarted,projects.projDateend,projects.projPrice from clients,projects projects其中clients.idclientsidclients=projects.clientsIdClients”;
Query Query=sessionFactory.getCurrentSession().createQuery(hql);
List listProjects=(List)query.List();
返回列表项目;
}
}
我的控制器现在看起来像这样:

    @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;
}
@RequestMapping(“/”)
public ModelAndView HandlerRequest()引发异常{
//List listProjects=projectsDao.List();
ModelAndView模型=新的ModelAndView(“项目列表”);
List listProjects=projectsformateddao.listProjects();
model.addObject(“测试”,列表项目);
收益模型;
}
在调试期间,我看到控制器中的listProjects中填充了数据,但使用model.addObject(“test”,listProjects)什么都不做,我无法访问JSP中的数据

运行站点后,我收到Tomcat错误: java.lang.NumberFormatException:用于输入字符串:“clName”

同样,完整的错误日志位于


< P>在你的DAO中,你要建立一个带有所有对象项目的列表。请检查你打印的所有IdProject是否都有你所期望的。如果不是,那么你在从数据库中提取数据的方式上有一些问题。也许你应该考虑根据你的映射在你的查询中设置别名。 然后,在JSP中,您试图访问对象中不存在的字段。在Projects类中,我看不到字段ProjectID。请使用该字段的名称而不是您在查询中选择的别名来访问您的字段

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

如果您仍然有错误,请回来

您是如何在数据库中声明
idProjects
的?它是什么类型的数据类型?请发布您的
Projects
对象,也感谢您指出这一点。我确实尝试过在Projects对象中填充客户端名称,而Projects对象没有相应的字段。因此,我创建了新的模型Projects formatted,它用字符串字段clName扩展了我的Projects类。我将用新的类更新我的问题。在Debbug期间,我可以看到在controller中,我可以获得正确的数据,但我无法将其传递给ModelAndView对象,因此我无法在我的jsp中显示它们。错误可能不是我想的。请尝试接受的answer on。Hibernate获取数据时似乎出现错误,未找到正确的类型。可能需要使用标量。有关我的个人信息,请检查数据库中的数据类型。我认为Hibernate获取与db类型对应的数据。可能存在差异
    @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;
}
<td>${user.idProjects}</td>