Как с помощью спецификаций реализовать исключения по 3 связанным таблицам?
Есть три таблицы. Эмейлы, рассылки и типы рассылок. Эмейлы один ко многим к рассылкам. Типы рассылок многие ко одному к рассылкам. Нужно через спецификации исключить все эмейлы которые содержат в рассылках хоть один определённый тип рассылок за определенный период. В метод мне приходит просто id типа рассылки и Period. Этот вариант работает если у эмейла только одна рассылка.
private static Specification<Email> isModelExcludeEquals(List<Long> modelId, Period period) {
return (root, query, criteriaBuilder) -> {
query.distinct(true);
return criteriaBuilder.and(
criteriaBuilder.lessThan(root.join("mailing",JoinType.LEFT).get("date"), LocalDateTime.now().minus(period)),
root.join("mailing", JoinType.LEFT).get("model").get("id").in(modelId)));};
}