java - JPA 外键 OneToMany

标签 java jpa eclipselink

我有两个实体,它们以一对多关系连接。

public class Book{
  @OneToMany(mappedBy = "book")
  private List<Page> pages;
}

public class Page{
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "book_id")
  public Book book;
}

因此,如果页面引用该书,则无法删除该书。 但是,只要引用一本书,如何防止页面被删除呢?

我希望有一个外键约束,只要页面对象引用任何书籍,就可以防止页面对象被删除。

感谢您的帮助!

最佳答案

我有一个使用@PreRemove 的解决方案。这样,如果页面链接到书籍,就可以防止页面被删除。

BookRelationShipExist:这只是您可以创建的异常,您也可以抛出任何其他类型的异常

public class Page{
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "book_id")
     public Book book;

     @PreRemove
     private void preRemove() {
         if (book != null) {
               throw new BookRelationShipExist();
         }
     }
 }

关于java - JPA 外键 OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957419/

相关文章:

concurrency - 分析 OpenJDK 或任何 Java VM 中的锁

java - 有没有办法用tomcat实现X-Robots-Tag指令?

spring - org.springframework.orm.jpa.vendor.HibernateJpaVendorAdaptergenerateDdl 不工作

java - 如何在多个 PU 之间最好地共享实体类/DAO?

java - 启用 JPA 静态编织(eclipselink)

java - 从 javabean 制作自定义 xml

java - 为什么我的相框什么都不显示?

java - 限制用户删除、重命名和修改Windows中使用Java创建的文件

jpa - JPA Criteria API:如何表达文字正确和文字错误?

java - 在 Eclipse Dali 中安装/更新 EclipseLink