Странное выполнение блока finally

224
24 июня 2019, 03:50

Всем привет. При регистрации пользователя ему отправляется email с подтверждением через метод sendActiovationEmail. При неудачном выполнении этого метода (например, почтовый сервер недоступен) пользователь все равно должен сохраняться в базу, но с пустым полем activationCode. Проблема в том, что почему-то не сохраняются роли пользователя в связанную таблицу user_roles, поля в таблице user сохраняются нормально. Хотелось бы разобраться в ситуации почему так происходит. При сохранении пользователя вне блока try-catch-finally сохранение происходит нормально. Код сервисного уровня выглядит примерно так:

HashSet<Role> roles = new HashSet<>();
roles.add(Role.USER);
User user = new User(username, password, email, activationCode, false, roles);
    try {
        sendActivationEmail(email, username, activationCode);
    }
    catch (MailSendException e){
        user.setActivationCode(null);
        throw e;
    }
    finally {
        userRepository.save(user);
    }

Код Entity User и связи с таблицей user_roles:

@Entity
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//...
//Роли:
@ElementCollection(targetClass = Role.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = 
"user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles;
//...
}
READ ALSO
Почему отсортированный массив обрабатывается быстрее, чем не отсортированный?

Почему отсортированный массив обрабатывается быстрее, чем не отсортированный?

Вот пример C++ кода, который выглядит очень странноПочему-то, когда данные отсортированы код выполняется почти в шесть раз быстрее

169
Данные в FormData не видны в консоли

Данные в FormData не видны в консоли

Вопрос из любопытства, почему данные в экземпляре FormData не видны при выводе в консоль, но при этом они видны во вкладке Network? Вывод в консоль...

141
Как перекодировать массив в Node.JS из CP1251 в UTF8?

Как перекодировать массив в Node.JS из CP1251 в UTF8?

Есть массив (точнее объект), как изменить кодировку его элементов из CP1251 в UTF8?

161
Перезагрузка ресурсов на iOS

Перезагрузка ресурсов на iOS

Столкнулся с проблемой повторной загрузки ресурсов в iOS (iPhone 7)Разрабатываю большое SPA приложение, с предзагрузкой ресурсов(изобр

151