首页 > 解决方案 > Hibernate:仅允许具有给定属性的实体加入 OneToMany 关联

问题描述

如果多方具有给定的属性值,是否可以签入@OneToMany或关联?@ManyToMany

例如,学生参观讲座:

@Entity
class Lecture implements Serializable {
  @Id
  Integer id;

  @OneToMany
  Set<Student> student;
}

@Entity
class Student implements Serializable {
  @Id
  Integer id;

  Boolean isFemale; 
}

我可以用“魔术”注释强制只允许女学生参观讲座吗?

标签: javahibernatevalidation

解决方案


您的 @OneToMany 注释将执行 SELECT 语句。您也许可以使用供应商专有注释过滤结果,例如 @Where ( https://forum.hibernate.org/viewtopic.php?f=1&t=1026210&view=next )。

但似乎您想限制 INSERT 案例。您可能只使用 Java bean 验证器。因此,如果您的 Student 类具有相反的 @ManyToOne 属性讲座,那么您可以创建一个拒绝新学生对象的验证器,这些对象与讲座链接并且是女性。(从而实现你想要的歧视)(见bean验证:https ://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#section-class-level-constraints )

但是您可能已经猜到自己的约束不是真正的数据库约束。使用 SQL 是不可能的,所以不要指望 JPA 可以。


推荐阅读