我有一个表 (Records),它与另一个表 (ProgramTypes) 有外键关系。该应用程序使用 Hibernate-JPA,因此这通过使用@ManyToOne;反映在代码中。@JoinColumnRecords 表中的@OneToMany标签,并在 ProgramTypes 表中具有外键约束和标签。
所以我对 Records 表做了一些列更改,没有触及这个特定的约束,突然我在检索数据时看到以下类型的消息。
javax.persistence.EntityNotFoundException: Unable to find package.com.ProgramTypes with id {}
Run Code Online (Sandbox Code Playgroud)
记录存在于数据库中,如果我替换映射
@ManyToOne
@JoinColumn(name="PRGRAMTYPESID", nullable=false)
private ProgramTypes programTypes;
Run Code Online (Sandbox Code Playgroud)
和
private long programTypesId
Run Code Online (Sandbox Code Playgroud)
有用。只是为了进一步混淆我发现它在某种程度上有效的映射 - 在满足应用程序搜索条件的单个特定记录的情况下。我对问题的来源感到困惑,并希望得到任何帮助来理解它。
编辑-这是使用的查询
String queryBuild = "select rec from Records rec " +
"where rec.locationsId in (:locationsId) and rec.roles.code in (:roleList)";
Query query = entityManager.createQuery(queryBuild);
query.setParameter("locationsId", locationsIdList);
query.setParameter("roleList", roleList);
return query.getResultList();
Run Code Online (Sandbox Code Playgroud)
这是要求的堆栈跟踪。
javax.persistence.EntityNotFoundException: Unable to find modules.sc.model.ProgramTypes with id 106
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:183)
at …Run Code Online (Sandbox Code Playgroud)