Весенние данные 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. через календарь мне нужно знать только Учетную запись (для текущего пользователя не имеет значения, имеет ли Календарь много связей с другими Учетными записями).
- При удалении учетной записи все календари должны быть удалены каскадом.
- Каскадное удалениеКалендаря должно быть активировано во время удаления Учетной записи, если это была последняя Учетная запись для Календаря.
- При добавлении календарей в учетную запись все календари следует добавлять каскадным способом.
- Для календарей, которые были сохранены ранее для других учетных записей, следует добавить ограничение для 5. ссылки.
Вопрос
Все эти случаи обработчики я могу реализовать в сервисах Spring. Но я считаю, что эту проблему можно решить на уровне гибернации, и я верю, что решение должно быть реализовано самым элегантным способом. Поэтому, пожалуйста, помогите мне разобраться или предложите мне, пожалуйста, подходите к управлению этими случаями наилучшим образом (некоторые спящие аннотации или другие инструменты).