У меня есть следующие доменные объекты: Диалог , который имеет список Сообщение s, у каждого из них есть набор newFor Участник s.Для кого сообщение в списке еще не прочитано.
Я пытаюсь написать метод интерфейса (или запрос) репозитория для извлечения карты бесед, содержащих несколько непрочитанных сообщений для этого участника.
Atm Я использую следующее, чтобы получить только список бесед:
@Query("SELECT c from Conversation c JOIN c.participants p WHERE :participant IN p")
List<Conversation> findByParticipantsIn(Participant participant, Pageable pageable);
Но мне нужно как-то обновить запрос, чтобы иметь возможность включать количество вложенных непрочитанных сообщений.Что-то в этом роде:
@Query("SELECT c, count(..my problem is here..) from Conversation c LEFT JOIN c.participants p WHERE :participant IN p ")
List<Object[]> findByParticipantsIn(Participant participant, Pageable pageable);
Кто-нибудь знает, как поместить объединения в count () или что еще можно здесь использовать?
UPD
Фрагменты сущности, раскрывающие отношения:
public class Conversation {
...
@OneToMany(cascade = CascadeType.ALL)
private List<Message> messages = new ArrayList<>();
...
@ManyToMany(fetch = FetchType.EAGER)
private Set<Participant> participants = new LinkedHashSet<>();
...
}
public class Message {
...
@ManyToMany(fetch = FetchType.EAGER)
private Set<Participant> newFor = new HashSet<>();
...
}
Участник не знает Сообщение и Диалог существование.