休眠:仅允许具有OneToMany关联的实体

时间:2018-11-14 13:42:11

标签: java hibernate validation

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

例如,参加讲座的学生:

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

  @OneToMany
  Set<Student> student;
}

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

  Boolean isFemale; 
}

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

1 个答案:

答案 0 :(得分:1)

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

但是您似乎想限制INSERT的大小写。您可能只使用Java bean验证器。因此,如果您的学生班级具有反向的@ManyToOne属性演讲,那么您可以创建一个验证器,该验证器拒绝与演讲相关联并且是女性的新学生对象。 (从而实现您所希望的区分)(请参见bean验证:https://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#section-class-level-constraints

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