2011-04-01 44 views
1

我試圖調試某人的代碼。但我不是休眠的專家,所以我要求你提供這方面的幫助。調用休眠查詢列表()方法會產生錯誤

我想從數據庫中檢索作業列表,但似乎有問題。

在實體類:

//JobEntity

@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH}, fetch=FetchType.EAGER) 
    @JoinColumn(name="job_id", nullable=false) 
    private Job jobId; 

    @Column(name="grp_id") 
    private String grpId; 

    @Id 
    @Column(name="id", nullable=false) 
    @GenericValue(strategy=GenerationType.SEQUENCE,generator="JOB_ENTITY_SEQUENCE") 
    private Integer id; 


//DaoImpl 

    public Collection<JobEntity> getJobsByGrpId(String grpId){ 
     Query q = getCurrentSession().createQuery("from JobEntity je where je.grpId= :grpId order by je.id"); 

     q.setString("grpId", grpId); 

     return q.list(); 
    } 

而我得到的錯誤是這樣的:

No row with the given identifier exists: [Job#:jb4567]... 

但在數據庫中,表中有數據。

我不確定這是什麼原因。

我試着在創建查詢之前放置一個getCurrentSession.flush()語句,並且我也嘗試將作業ID的級聯類型從REFRESH更改爲PERSIST,但仍會發生相同的錯誤。

緩存與此有什麼關係? 或者,這裏似乎是什麼問題?我已經無能爲力了。

在此先感謝您的答案......

+0

有人嗎?順便說一下,即時通訊在一個64位環境中使用postgreSQL 9.0 ..這無關緊要(關於這個問題),ryt? – fleur 2011-04-01 14:29:01

回答

0

嘗試用下面的代碼;

public Collection<JobEntity> getJobsByGrpId(String grpId){ 
     Query q = getCurrentSession().createQuery("from JobEntity je where je.grpId= :grpId order by je.id"); 

q.setString("grpId", grpId); 

     return q.list(); 
    } 

您沒有設置位置參數grpId的值,這可能是問題所在。

+0

你好guruKulki,是的,我忘了把它包含在上面的代碼中。 – fleur 2011-04-04 01:01:27

+0

無論如何GuruKulki。但是,嗯,除此之外,這個問題的可能原因是什麼? – fleur 2011-04-04 01:15:38

+0

檢查此鏈接,https://forums.hibernate.org/viewtopic.php?f=25&t=984668 – GuruKulki 2011-04-04 15:53:41