У меня есть таблица с пользователями, первое поле этой таблицы - id.
@Entity
@Table(name = "usr")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
@CollectionTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<Role> roles;
}
Существует перечисление, в котором перечислены типы ролей безопасности.
public enum Role implements GrantedAuthority {
USER, ADMIN;
@Override
public String getAuthority() {
return name();
}
}
Поле id
в таблице usr
связано внешним ключом в таблице user_role
.
Нет сущностидля таблицы user_role
Hibernate автоматически создает ключи и таблицу с ролями в соответствии с примечаниями, указанными в классе сущности **user**
.
Я пытаюсь удалить **user**
запись.
@Override
@Transactional
public void rollbackUserSave(User user) {
Optional<User> byId = userRepository.findById(user.getId());
User userForDelete = byId.orElse(null);
deleteFromUser(userForDelete);
}
/** Удаление из таблицы usr данных*/
private void deleteFromUser(User user) {
if (user != null) {
this.userRepository.delete(user);
}
}
Но удаление не происходит и таких же ошибок и в консоли я не вижу сообщений о неудачном удалении.
Обновление
Теперь это работа . Я не использовал режим отладки.
это мой код.
public Optional<User> addUser(User user) {
String username = user.getUsername();
User userFromDb = userRepository.findByUsername(username);
if (userFromDb != null) {
return Optional.empty();
}
user.setActive(true);
Set<Role> singleton = Collections.singleton(Role.USER);
user.setRoles(singleton);
String stringUuid = UUID.randomUUID().toString();
user.setActivationCode(stringUuid);
userRepository.save(user);
if(sendMail(user)){
User byUsername = this.userRepository.findByUsername(username);
return Optional.ofNullable(byUsername);
}
return Optional.empty();
}
private boolean sendMail(User user) {
String emailTo = user.getEmail();
String username = user.getUsername();
String activationCode = user.getActivationCode();
String messageText = "Hello, %s! \n" +
"Welcome to Sweater. Please, visit next link: http://localhost:8080/%s/activate/%s";
String message = String.format(messageText, username, username, activationCode);
boolean isSend = false;
if (!emailTo.isEmpty()) {
isSend = this.mailSender.send(emailTo, "Activation code", message);
}
if(!isSend && !emailTo.isEmpty()){
rollbackUserSave(user);
}
return true;
}
@Override
@Transactional
public void rollbackUserSave(User user) {
Optional<User> byId = userRepository.findById(user.getId());
User userForDelete = byId.orElse(null);
deleteFromUser(userForDelete);
}
private void deleteFromUser(User user) {
if (user != null) {
this.userRepository.delete(user);
}
}
Может кто-нибудь объяснить, что происходит? Спасибо.