java - Spring Boot 连接两个具有无效 FK 条目的实体

标签 java spring hibernate

我正在使用 hibernate 在我没有写入权限的数据库上映射一些 Java 类。用作 ClientEpisodes 和 Physician 之间的 FK 的字段之一有 6 行,其中包含代表 FK 的 -1。这显然是一个无效的 FK,但我仍然需要加入并忽略这些医生并拥有一个无效的医生。 我正在使用

加入类(class)
    @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 框架中的内部实体验证没有任何影响。 您可以使用 hibernate 特定的 @NotFound 注释:

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

但是请注意,如果您在映射 Collection 的 @OneToMany 或 @ManyToMany 注释中使用它,hibernate 将以 null 填充无效/缺失的实体(因此列表将包含 null 值)。

关于java - Spring Boot 连接两个具有无效 FK 条目的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018238/

相关文章:

Java 跨平台 Swing 外观

java - Hibernate createSqlQuery 没有从数据库获取 blob 数据 - query.list() 上的 "NumberFormatException"

java - 在目录中搜索特定模式的文件

java - 如何打印JTable中选定的行

java - 如何在日志文件中仅获取特定级别的消息?

java - Hibernate + MySQL - 如何获得不可猜测的生成 ID?

java - Hibernate ManyToOne Lazy 不工作最终类

java - 我可以有一个使用 Spring Data JPA 处理多个实体类的 JPA 存储库接口(interface)吗?

java - @ModelAttribute Spring MVC 多重选择不设置ArrayList

java - 如何表达对 Spring 中导入配置中定义的 bean 的依赖关系?