2017-06-05 177 views
0

我想创建一个Spring Hibernate的应用程序,我访问具有以下值的表:在DAOImpl类Hibernate查询只返回一个值

select REPAIR_STATUS_CD,STATUS_DATE 
from repair_status 
where REPAIR_CONF_NO ='1234567'; 

REPAIR_STATUS_CD STATUS_DATE   
----- -------------------- - 
NEWO 25-FEB-2016 20:07:45 
RLSD 25-FEB-2016 20:07:45 
REQA 25-FEB-2016 20:13:24 
URCD 26-FEB-2016 19:43:40 
UINS 26-FEB-2016 19:43:45 
UBER 27-FEB-2016 09:42:59 
RQT6 27-FEB-2016 09:46:28 
RQXP 03-MAR-2016 12:24:43 
RBER 04-MAR-2016 21:52:22 
SPCM 09-MAY-2016 18:13:33 
SCOM 10-MAY-2016 19:09:54 

现在我取相同的使用下面的码。

Session session = sessionFactory.getCurrentSession(); 

      session.beginTransaction(); 

      Query<RepairStatus> query = session.createQuery("from  RepairStatus where repairConfNo = '"+repairConfNo+"' "); 
      List<RepairStatus> repairStatusList = query.getResultList();  
      System.out.println("Inside Repair Status Service"); 
      for(RepairStatus repairStatus: repairStatusList){ 
       System.out.println(repairStatus.getRepairStatusCode()); 
      } 

但是,当我使用的系统输出和打印输出的for循环我得到以下几点:

内部维修状态服务

NEWO 
NEWO 
NEWO 
NEWO 
NEWO 
NEWO 
NEWO 
NEWO 
NEWO 

为什么行得到重复,虽然数据库具有适当的价值。

感谢很多提前:)

而且这是我的实体类

package com.gsx.entity; 

import java.util.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="TG_REPAIR_STATUS") 
public class RepairStatus { 

@Id 
@Column(name="REPAIR_CONF_NO") 
private String repairConfNo; 

@Column(name="REPAIR_STATUS_CD") 
private String repairStatusCode; 

@Column(name="STATUS_DATE") 
private Date statusDate; 

public void setStatusDate(Date statusDate) { 
    this.statusDate = statusDate; 
} 

public String getRepairConfNo() { 
    return repairConfNo; 
} 

public void setRepairConfNo(String repairConfNo) { 
    this.repairConfNo = repairConfNo; 
} 

public Date getStatusDate() { 
    return statusDate; 
} 

public String getRepairStatusCode() { 
    return repairStatusCode; 
} 

public void setRepairStatusCode(String repairStatusCode) { 
    this.repairStatusCode = repairStatusCode; 
} 

} 
+0

代码有SQL注射但实际上很好。 – StanislavL

+0

@StanislavL非常感谢您的快速回复。但我没有得到什么是不正确的在这里:)对不起 –

+0

启用“显示SQL”,看看什么是SQL查询看起来像 –

回答

0

此时应更换

Query<RepairStatus> query = session.createQuery("from  RepairStatus where repairConfNo = '"+repairConfNo+"' "); 

Query<RepairStatus> query = session.createQuery("from  RepairStatus where repairConfNo =:repairConfNo"); 
parameterQuery.setParameter("repairConfNo", you_repairConfNo); 
List<RepairStatus> repairStatusList = query.getResultList(); 

查询是好看,你需要enabl E中的show_sql

如果您正在使用hibernate.cfg.xml那么你可以让喜欢

<property name="show_sql">true</property> 

那么SQL调试由Hibernate生成的SQL语句,它可以帮助你找出问题。

而且你的表名是TG_REPAIR_STATUS

@Table(name="TG_REPAIR_STATUS") 
public class RepairStatus 

和你在repair_status运行的查询

select REPAIR_STATUS_CD,STATUS_DATE 
from repair_status 
where REPAIR_CONF_NO ='1234567'; 

表而不是TG_REPAIR_STATUS表,请验证该数据库

+0

尝试使用show_sql为True,并得到以下内容:休眠:选择repairstir0_.REPAIR_CONF_NO作为REPAIR_CONF_NO1_0_,repairstat0_.REPAIR_STATUS_CD作为REPAIR_STATUS_CD2_0_,repairstat0_.STATUS_DATE as STATUS_DATE3_0_ from TG_REPAIR_STATUS repairstat0_ where repairstat0_.REPAIR_CONF_NO ='276139092'........表名是TG_REPAIR_STATUS,映射是正确的..这只是一个错字。 :)但是,这似乎并没有解决问题 –

+0

你可以请运行'选择REPAIR_STATUS_CD,STATUS_DATE 从TG_REPAIR_STATUS 其中REPAIR_CONF_NO ='276139092'' 在你的数据库和过去的输出在这里? –

+0

从TG_REPAIR_STATUS中选择REPAIR_STATUS_CD,STATUS_DATE,其中REPAIR_CONF_NO ='276139092'; REPAI STATUS_DATE ----- -------------------- NEWO 14-APR-2017 07:32:00 REQA 14-APR-2017 08 :32:36 RLSD 14-APR-2017 07:32:00 RQT6 18-APR-2017 05:35:19 RQXP 21-APR-2017 07:39:32 UINS 17-APR-2017 15:00 :31 URCD 17-APR-2017 14:59:39 URTN 18-APR-2017 05:34:41 USHP 28-APR-2017 06:13:31 已选中9行。 –