Регистрация пользователя в Spring Security с помощью Hibernate и Thymeleaf - PullRequest
1 голос
/ 13 февраля 2020

Я пытаюсь изучить Spring Security. Я работаю над коммерческой системой управления, чтобы научиться программировать.

Проблема в том, что я не могу сохранить связь между таблицами. Параметр отправляется, но в элементе управления он становится нулевым или пустым.

Где я могу ошибаться?

Отображения гибернации

USUARIO MODEL

@ManyToMany
@JoinTable(name="usuario_perfil", joinColumns = 
    @JoinColumn(name="usuario_id", referencedColumnName="id"), inverseJoinColumns = 
        @JoinColumn(name="perfil", referencedColumnName="rolePerfil"))
private List<Perfil> perfil2;

PERFIL MODEL

@Entity
public class Perfil implements GrantedAuthority{

    private static final long serialVersionUID = 1L;

    @Id
    @Enumerated
    private RolePerfil rolePerfil;

    @ManyToMany(mappedBy = "perfil2")
    private List<Usuario> usuarios;

    @Override
    public String getAuthority() {
        return rolePerfil.toString();
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public RolePerfil getRolePerfil() {
        return rolePerfil;
    }

    public void setRolePerfil(RolePerfil rolePerfil) {
        this.rolePerfil = rolePerfil;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

}

Thymeleaf

<div class="form-group col-md-2">
    <label for="perfil2">Perfil</label>
    <select class="form-control" name="perfil2" id="perfil2">
        <option
            th:each="role : ${T(com.Test.model.RolePerfil).values()}"
            th:value="${role}" th:text="${role}">
        </option>
    </select>
</div>

Params

enter image description here

USUAR IOS КОНТРОЛЛЕР

@PostMapping(value = "/save")
public ModelAndView save(Usuario usuario, BindingResult bindingResult, RedirectAttributes redirectAttributes) {

    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    String senha = passwordEncoder.encode(usuario.getSenha());
    String confirmaSenha = passwordEncoder.encode(usuario.getConfirmaSenha());
    usuario.setSenha(senha);
    usuario.setConfirmaSenha(confirmaSenha);

    System.out.println(usuario);

    usuarioRepository.save(usuario);
    redirectAttributes.addFlashAttribute("message", "Operação realizada com sucesso!");

    return edit(usuario.getId());
}

Консоль

    Usuario [nome=Bruno, login=bruno, senha=$2a$10..., confirmaSenha=$2a$10...,
email=test@test, dataRegistro=2020-02-13T02:50:23.790, status=true, perfil2=null]
    Hibernate: select next_val as id_val from hibernate_sequence for update
    Hibernate: update hibernate_sequence set next_val= ? where next_val=?
    Hibernate: insert into usuario (data_registro, email, login, nome, senha, status, id) values (?, ?, ?, ?, ?, ?, ?)

Hibernate

Hibernate: create table cliente (id bigint not null, bairro varchar(255), celular varchar(255), cep varchar(255), cidade varchar(255), cpf varchar(255), data_cadastro datetime, data_nascimento date, email varchar(255), endereco varchar(255), estado varchar(255), facebook varchar(255), instagram varchar(255), nome varchar(255), observacoes varchar(255), profissao varchar(255), sexo varchar(255), telefone varchar(255), tipo_pessoa varchar(255), twitter varchar(255), primary key (id)) engine=InnoDB
Hibernate: create table hibernate_sequence (next_val bigint) engine=InnoDB
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: insert into hibernate_sequence values ( 1 )
Hibernate: create table perfil (role_perfil integer not null, primary key (role_perfil)) engine=InnoDB
Hibernate: create table produto (id bigint not null, altura integer, categoria varchar(255), codigo_barra bigint, comissao decimal(19,2), comprimento integer, custo_operacional decimal(19,2), data_fabricacao datetime, data_validade datetime, descricao varchar(255), estoque integer, estoque_minimo integer, fabricante varchar(255), fornecedor varchar(255), icms decimal(19,2), largura integer, margem_lucro decimal(19,2), modelo varchar(255), nome varchar(255), origem varchar(255), peso integer, preco_promocional decimal(19,2), preco_unidade decimal(19,2), preco_venda decimal(19,2), referencia bigint, unidade varchar(255), primary key (id)) engine=InnoDB
Hibernate: create table usuario (id bigint not null, data_registro datetime, email varchar(255), login varchar(255), nome varchar(255), senha varchar(255), status bit, primary key (id)) engine=InnoDB
Hibernate: create table usuario_perfil (usuario_id bigint not null, perfil integer not null) engine=InnoDB
Hibernate: alter table usuario_perfil add constraint FKh5di2ijgv1c31x7q4k2xggiga foreign key (perfil) references perfil (role_perfil)
Hibernate: alter table usuario_perfil add constraint FKnrjqnbylalt4ykxbcef24f57w foreign key (usuario_id) references usuario (id)

изначально каждый пользователь будет иметь один PERFIL. И в этом заключается проблема. почему я не могу сохранить PERFIL?

...