2015-02-26 64 views
-1

我越來越引起的:javax.persistence.EntityNotFoundException:無法找到tn.entities.AgenceBnq ID爲01,當我通過僱工EntityNotFoundException Hibernate的多對一​​映射但不存在數據

僱工類獲得AgenceBnq

@Table(name = "EMPLOYE") 
@NamedQuery(name = "Employe.findById", query = "SELECT e FROM Employe e where e.employeMat = ?1"), 
public class Employe implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@Column(name = "EMPLOYE_MAT", unique = true, nullable = false, length = 15) 
private String employeMat; 
... 
@ManyToOne 
@JoinColumn(name = "AGENCE_COD") 
private AgenceBnq agenceBnq; 
} 

@Entity 
@Table(name="AGENCEBNQ") 

public class AgenceBnq implements Serializable { 
private static final long serialVersionUID = 1L; 

@Id 
@Column(name="AGENCE_COD", unique=true, nullable=false, length=10) 
private String agenceCod; 

... 
//bi-directional many-to-one association to Employe 
@OneToMany(mappedBy="agenceBnq") 
private Set<Employe> employes; 
} 

我打電話namedQuery Employe.findById DAO中檢索數據,我必須從僱工獲得AgenceBnq但得到這個錯誤,同時呼籲query.getResultList()

@NotFound(action = NotFoundAction.IGNORE)對我來說不是有用的,因爲數據存在於AGENCEBNQ表中,我必須通過Employe 退訂日期這是一個hibernate中的錯誤嗎?我正在使用休眠版本3.6.7.Final

+1

爲什麼它是'e.employeMat =?1'而不僅僅是'e.employeMat =?'? – Jan

+0

我總是使用'?1'作爲參數,它工作正常,即使使用'e.employeMat =?'我也有同樣的問題 –

回答

0

首先,您不需要查詢它,EnityManger.find(Employee.class,YOUR_ID)將完成這項工作。其他不要用?在你的查詢中,只有名字(e.employeMat =:id),因爲它更容易調試,對於複雜的查詢更少錯誤。

最後,檢查您的數據庫表,如果Employee表中的AGENCE_COD列確實包含您的實體崩潰(並且其長度與AgenceBnq的ID長度相匹配)的有效ID。它應該起作用,它的典型原因是你的Employe.AGENCE_COD沒有價值,當你創建新的EMploye時,你只會將它添加到Agence中,但是你沒有在Employ中設置Agence。

+0

謝謝你的回答,我完成了你所有的建議,但是我沒有創建Employe我只是從dataBase中選擇數據,我仍然有同樣的問題 –

+0

我不是說你創建我是說當員工被創建時它沒有正確保存。不僅原子能機構必須存在,而且必須在僱員表中正確引用(你的數據庫中是否有外鍵約束?) – Zielu

+0

是的,我有外鍵約束,並且在數據庫中很好地引用了標準, –