Hibernate: разрешить только объектам с данным атрибутом для ассоциации OneToMany - PullRequest
0 голосов
/ 14 ноября 2018

Можно ли проверить в ассоциации @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 голосов
/ 14 ноября 2018

Ваша аннотация @OneToMany выполнит инструкцию SELECT. Возможно, вы сможете отфильтровать результат с помощью фирменных аннотаций, таких как @Where (https://forum.hibernate.org/viewtopic.php?f=1&t=1026210&view=next).

Но похоже, что вы хотите ограничить случай INSERT. Вы можете просто использовать валидатор Java bean. Итак, если ваш класс Student имеет обратный атрибут @ManyToOne lecture , то вы можете создать валидатор, который отклоняет новые объекты студента, которые связаны с лекцией И являются женскими. (таким образом реализуя желаемое различие) (см. проверку бина: https://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-customconstraints.html#section-class-level-constraints)

Но вы могли догадаться, что ваше ограничение не является реальным ограничением базы данных. Это невозможно с SQL, поэтому не ожидайте, что это будет возможно с JPA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...