Удалить связанные записи в Postgresql, используя Spring-data-jpa (внешний ключ) - PullRequest
0 голосов
/ 16 октября 2019

У меня есть таблица с пользователями, первое поле этой таблицы - 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);
        }
    }

Может кто-нибудь объяснить, что происходит? Спасибо.

...