2017-06-05 108 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行。 –