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