У меня проблема с добавлением некоторых объектов в базу данных.У меня есть пользовательский объект, который содержит объект @OneToOne, который является окном сообщения.Есть объект с Set <Conversation>
, содержащий список разговоров.Разговор содержит информацию о себе и объекте List<Message>
.Сообщение содержит несколько других данных.Я создал метод, помеченный как @Transactional, который «создает новое сообщение».Я выполняю в нем соответствующие операции, а затем сохраняю данные в вышеуказанные объекты.Я делаю это следующим образом:
@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;
}
Затем я хочу вернуть разговоры пользователя после создания, чтобы у него были текущие данные на стороне клиента.Кажется, все в порядке, запись в консоли данных о разговоре и о пользователе - это все, все идентификаторы также, они не равны NULL, но объект не возвращается, а метод зависает и ничего не возвращает без исключения.Клиентское приложение ожидает ответа от сервера, но ничего не происходит, серверное приложение висит здесь.Что я делаю не так?
В журналах при включенном режиме отладки такие журналы появляются.Пропуск журналов, извлекающих данные из базы данных:
2018-09-28 13:47:58.447 DEBUG 10476 --- [nio-8090-exec-1] org.hibernate.SQL : insert into message (is_readed, message, message_from, when_sent, id) values (?, ?, ?, ?, ?)
2018-09-28 13:47:58.449 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIT] - [false]
2018-09-28 13:47:58.450 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [aaaaaaa]
2018-09-28 13:47:58.450 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [mati]
2018-09-28 13:47:58.451 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [TIMESTAMP] - [Fri Sep 28 13:47:57 CEST 2018]
2018-09-28 13:47:58.452 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [BIGINT] - [785]
2018-09-28 13:47:58.454 DEBUG 10476 --- [nio-8090-exec-1] org.hibernate.SQL : insert into message (is_readed, message, message_from, when_sent, id) values (?, ?, ?, ?, ?)
2018-09-28 13:47:58.455 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIT] - [false]
2018-09-28 13:47:58.455 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [aaaaaaa]
2018-09-28 13:47:58.455 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [mati]
2018-09-28 13:47:58.455 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [TIMESTAMP] - [Fri Sep 28 13:47:57 CEST 2018]
2018-09-28 13:47:58.455 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [BIGINT] - [786]
2018-09-28 13:47:58.467 DEBUG 10476 --- [nio-8090-exec-1] org.hibernate.SQL : insert into message_box_conversation_list (message_box_id, conversation_list_id) values (?, ?)
2018-09-28 13:47:58.467 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [674]
2018-09-28 13:47:58.467 TRACE 10476 --- [nio-8090-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [721]