Siemka. Mam problem z dodaniem niektórych obiektów do bazy danych. Mam obiekt użytkownika, który zawiera obiekt @OneToOne, który jest skrzynką wiodomości. Istnieje w niej obiekt Set <Conversation> zawierający listę rozmów. Rozmowa zawiera informacje o sobie i liście obiektów List<Message>. Wiadomość zawiera kilka innych danych. Zrobiłem metodę oznaczoną jako @Transactional, która "tworzy nową wiadomość". Wykonuję w nim odpowiednie operacje, a następnie zapisuję dane w powyższych obiektach. Robię to w ten sposób:
@Transactional
public Set<Conversation> newMessage(MessageHelper messageHelper) {
User sender = userRepository.getUserByUserName(messageHelper.getFrom());
User receiver = userRepository.getUserByUserName(messageHelper.getTo());
Conversation senderConversation = conversationRepository.getConversationWithUser(sender.getUsername(), receiver.getUsername());
if(senderConversation == null)
senderConversation = new Conversation(sender.getUsername(), receiver.getUsername());
Conversation receiverConversation = conversationRepository.getConversationWithUser(receiver.getUsername(), sender.getUsername());
if(receiverConversation == null)
receiverConversation = new Conversation(receiver.getUsername(), sender.getUsername());
Message message = messageHelper.getMessage();
receiverConversation.getMessages().add(message);
Message receiverMessage = new Message(message.getMessageFrom(), message.getMessage());
receiverMessage.setWhenSent(message.getWhenSent());
senderConversation.getMessages().add(receiverMessage);
sender.getMessageBox().getConversationList().add(senderConversation);
receiver.getMessageBox().getConversationList().add(receiverConversation);
entityManager.persist(message);
entityManager.persist(receiverMessage);
entityManager.merge(sender);
entityManager.merge(receiver);
Set<Conversation> conversations = getConversations(sender.getUsername());
System.out.println("Conv from service: " + conversations);
System.out.println(userRepository.getUserByUserName(sender.getUsername()));
// the application hangs here
return conversations;
}
Następnie chcę zwrócić konwersacje użytkownika po utworzeniu, aby zawierał aktualne dane po stronie klienta. Wszystko wydaje się być w porządku, wypisując w konsoli dane o konwersacji i użytkowniku jest wszystko ok, są również wszystkie id, nie są nullami, ale obiekt nie jest zwracany, a metoda zawiesza się i nie zwraca niczego bez rzucania wyjątku. Aplikacja kliencka oczekuje na odpowiedź z serwera, ale nic się nie dzieje, aplikacja serwera zawiesza się. Co ja robię źle?