我在没有写访问权限的数据库上使用休眠模式映射了一些Java类。 ClientEpisodes和Physician之间用作FK的字段之一有6行,其中FK包含-1。这显然是一个无效的FK,但我仍然需要加入并且只是忽略这些医师,并请一位无效的医师。
我正在使用

    @JoinColumn(name = "epi_phid1", referencedColumnName = "ph_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
    private Physician physician;


我尝试指定NO_CONSTRAINT来查看它是否会忽略它,但是仍然出现以下错误:

javax.persistence.EntityNotFoundException: Unable to find private.package.info.Physician with id -1


有什么办法告诉Hibernate忽略无效的值,例如-1?

最佳答案

如果使用模式生成,则具有NO_CONSTRAINT值的@ForeignKey注释告诉hibernate不生成外键。它对JPA框架中的内部实体验证没有任何影响。
有一个休眠专用的@NotFound批注,您可以使用:

 @JoinColumn(name = "epi_phid1", referencedColumnName = "ph_id")
 @NotFound(action = NotFoundAction.IGNORE)
 private Physician physician;


但是请注意,如果您在映射一个Collection的@OneToMany或@ManyToMany批注中使用此选项,休眠将用null填充无效/缺失的实体(因此列表将包含null值)。

10-07 13:11