javax.persistence.EntityNotFoundException: Unable to find xxx

    完整的异常信息就不copy上来了,显得繁杂。

    本人使用的是Spring Data JPA + Hibernate + Oracle。

问题描述

    因为是翻新原来的老项目,所以数据库沿用了老的结构和数据,但是新建的实体,可能与之前的有一些差异,添加了一些与老数据库约束有差异的数据,主要体现在有@OneToOne、@ManyToOne注解的地方,查询的时候检查了约束,导致最终失败(比如子表中没有主表中ID对应的记录)。

解决

    解决方法:

    1、删除新加的有问题的数据。

    但是,如果有大量的数据,就不是太愿意做这样的事。

    更重要的是,有时候我们却需要这样的设计,比如机构中,父机构字段关联这该表的其他数据的主键,这时,顶级机构显然是这个键可以为空的。

    2、我们可以添加注解,避免这个错误的发生:@NotFound(action=NotFoundAction.IGNORE)

    在实体类中是这样的:

    @ManyToOne
    @JoinColumn(name="porgid")
    @NotFound(action=NotFoundAction.IGNORE)//如果没有父机构,添加注解防止报错
    private OrganizationEo porgid;