Весенние данные JPA. Hibernate 5. Условная обработка каскада ManyToMany

Есть много информации и примеров, как использовать @ManyToMany и эта часть понятна в общем. Я не нашел элегантного решения для моего случая. Я знаю, как использовать обходной путь, но я надеюсь, что каждый знает и может поделиться элегантным решением или идеей, которую следует использовать..

Детали дохода:

Таблицасчетов

@Entity
@Table(name = "account_table")
public class Account {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "account_seq_gen")
    @SequenceGenerator(name = "account_seq_gen", sequenceName = "ACCOUNT_SEQ")
    private Long id;
    @ManyToMany(cascade = CascadeType.REMOVE)
    @JoinTable(name = "account_calendar_relation",
            joinColumns = @JoinColumn(name = "account_id"),
            inverseJoinColumns = @JoinColumn(name = "calendar_id")
    )
    private List<Calendar> calendars = new ArrayList<>();
//...
}

связано с календарем

@Entity
@Table(name = "calendar")
public class Calendar {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "calendar_seq_gen")
    @SequenceGenerator(name = "calendar_seq_gen", sequenceName = "CALENDAR_SEQ")
    private Long id;
    @ManyToMany(mappedBy = "calendars")
    private List<Account> accounts;
//...
}

столько много.

Особые ограничения

Загрузка информации об учетной записи Я хочу получить доступ ко всем сопоставленным календарям (для учетной записи), но мне не интересно иметь доступ ко всем учетным записям, сопоставленным с любым доступным календарем через учетную запись. Мне нужна ситуация, чтобы подражать некоторому особому поведению:

  1. Загрузка учетной записи для пользователя Мне интересно получить доступ к соответствующей коллекции календаря.
  2. После 1. через календарь мне нужно знать только Учетную запись (для текущего пользователя не имеет значения, имеет ли Календарь много связей с другими Учетными записями).
  3. При удалении учетной записи все календари должны быть удалены каскадом.
  4. Каскадное удалениеКалендаря должно быть активировано во время удаления Учетной записи, если это была последняя Учетная запись для Календаря.
  5. При добавлении календарей в учетную запись все календари следует добавлять каскадным способом.
  6. Для календарей, которые были сохранены ранее для других учетных записей, следует добавить ограничение для 5. ссылки.

Вопрос

Все эти случаи обработчики я могу реализовать в сервисах Spring. Но я считаю, что эту проблему можно решить на уровне гибернации, и я верю, что решение должно быть реализовано самым элегантным способом. Поэтому, пожалуйста, помогите мне разобраться или предложите мне, пожалуйста, подходите к управлению этими случаями наилучшим образом (некоторые спящие аннотации или другие инструменты).

0 ответов

Другие вопросы по тегам