我受到了以下问题:javax.persistence.EntityNotFoundException:当我通过Employe获得AgenceBnq时,无法找到ID为01的tn.entities.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;
}
我在DAO中调用namedQuery Employe.findById来检索数据,我必须从Employe获取AgenceBnq,但在调用 query.getResultList()
时会出现此错误@NotFound(action = NotFoundAction.IGNORE)对我来说没有用,因为AGENCEBNQ表中存在数据,我必须通过Employe重新定义日期 这是hibernate中的一个错误吗?我正在使用hibernate版本3.6.7.Final
答案 0 :(得分:0)
首先,您不需要查询它,EnityManger.find(Employee.class,YOUR_ID)将完成这项工作。
其次不使用?在您的查询中,但名称(e.employeMat =:id),因为它更容易调试,更少的错误prones复杂的查询。
最后,检查您的数据库表是否Employee表中的AGENCE_COD列确实包含崩溃的权限的有效ID(并且它的长度与AgenceBnq的ID长度匹配)。它应该有效,这就是为什么它不会使你的Employe.AGENCE_COD具有defualt值的典型原因,当creatubg新的EMploye时,你只将它添加到Agence,但你没有在Employ中设置Agence。