主线程中的异常 "main" javax.persistence.EntityNotFoundException: 无法找到 ID 为 00001388000307 的 CNPJ
我正在阅读 JPA 文档,我发现当尝试访问实体(通过 EntityManger 接口的 getReference 方法)但实体不存在时,会抛出此异常。
当通过 EntityManager.getReference 获取的实体引用被访问但实体不存在时,持久性提供程序抛出此异常。
我有这些实体:Salesman
和 CNPJ
。可能存在许多具有相同 CNPJ 的销售员,换句话说,是一个 @ManyToOne
关系。
这个关系正常工作。
但是,当我尝试执行查询时:
select r from Salesman r join fetch r.yearMonth left join fetch r.cnpj
为了将销售员与其年月(它正在工作!)关系和其CNPJ关系一起带来,当我尝试执行左连接时,会抛出异常,如我所提到的。
当我不执行LEFT JOIN
时,非常好,所有销售员都有他的CNPJs,没有任何异常,但是,有些销售员没有CNPJ,我也必须将它们带来,因此需要执行LEFT JOIN
。
@Entity
public class Salesman{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@JoinColumn(name = "year_month")
@ManyToOne
private YearMonth yearMonth;
private String cnpjS;
@JoinColumn(name = "cnpj")
@ManyToOne
private CNPJ cnpj;
public AnoMes getYearMonth() {
return yearMonth;
}
public CNPJ getCnpj() {
return cnpj;
}
}
@Entity
public class CNPJ {
@Id
@Column(name = "CCG", length = 14)
private String ccg;
public String getCcg() {
return ccg;
}
}
Hibernate 生成的选择器:
select *
from salesman s
inner join yearmonth y on s.ano_mes = y.id
left outer join cnpj c on s.cnpjS = c.CCG
这个咨询返回这些值,rcnpj是销售员的CNPJ,bcnpj是来自CNPJ的。一些销售员带有空的CNPJ,我认为这可能是问题所在。但我不这么认为。