Relacionamento Hibernate e Visão JSF

2 respostas Resolvido
jsfhibernatejava
V

Boa tarde à todos!
Estou iniciando em JAVA usando JSF e HIBERNATE, já encontrei muitos exemplos na WEB, porém, nenhum com a complexidade que procuro/preciso!

Notem a tela abaixo:

Nela tenho o cadastro de usuário e na datatable quero adicionar seus respectivos perfis através de um autocomplete e/ou de um dialog.

Quero usar essa arquitetura em todo o sistema!
Não acho nada deste tipo, alguém teria disponibilidade para me ajudar?

Obrigado!

2 Respostas

andrebmarinho

Poderia exemplificar melhor? Pois esta parecendo apenas que é pra preencher os campos acima e quando clicar no salvar o usuario vai aparecer no datatable. É só isso?

V
Solucao aceita

Antes de mais nada, muito obrigado pela atenção!

Não, não é apenas isso!

Vou tentar explicar mais detalhadamente!
São entidades distintas:

1º Entidade- Usuário

@Entity

@Inheritance(strategy = InheritanceType.JOINED)

public abstract class Usuario implements Serializable, UserDetails {
private Integer id;
private String nome;
private String email;
private String login;
private String senha;
private boolean ativo;
private UsuarioPerfil usuarioPerfil;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
    return id;
}

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

@NotEmpty(message = "IMPORME O LOGIN!")
public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

@NotEmpty(message = "IMPORME A SENHA!")
public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    this.senha = senha;
}

@Override
@Transient
public Collection<? extends GrantedAuthority> getAuthorities() {
    Set<GrantedAuthority> authority = new HashSet<GrantedAuthority>();
    authority.add(new GrantedAuthorityImpl("ROLE_USER"));
    return authority;

}

@Override
@Transient
public String getPassword() {
    return senha;
}

@Override
@Transient
public String getUsername() {
    return login;
}

@Override
@Transient
public boolean isAccountNonExpired() {
    return true;
}

@Override
@Transient
public boolean isAccountNonLocked() {
    return true;
}

@Override
@Transient
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
@Transient
public boolean isEnabled() {
    return ativo;
}


@NotEmpty(message = "IMPORME O NOME!")
public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}


@NotEmpty(message = "IMPORME O EMAIL!")
@Email(message = "INFORME UM EMAIL VÁLIDO")
public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public boolean isAtivo() {
    return ativo;
}

public void setAtivo(boolean ativo) {
    this.ativo = ativo;
}

}


2º Entidade - UsuarioPerfil

@Entity
public class UsuarioPerfil implements Serializable {

private static final long serialVersionUID = 0L;
private Integer id;
private String status;
private Perfil perfil;
private Usuario usuario;

public UsuarioPerfil(){
    
}

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
    return id;
}

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

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}


@ManyToOne 
@JoinColumn(name = "id_perfil")
public Perfil getPerfil() {
    return perfil;
}

public void setPerfil(Perfil perfil) {
    this.perfil = perfil;
}
@ManyToOne 
@JoinColumn(name = "id_usuario")
public Usuario getUsuario() {
    return usuario;
}

public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
}

@Override
public int hashCode() {
    int hash = 7;
    hash = 23 * hash + Objects.hashCode(this.id);
    hash = 23 * hash + Objects.hashCode(this.status);
    return hash;
}



@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final UsuarioPerfil other = (UsuarioPerfil) obj;
    if (!Objects.equals(this.status, other.status)) {
        return false;
    }
    if (!Objects.equals(this.id, other.id)) {
        return false;
    }
    return true;
}

Sendo assim, tenho na parte superior, as informações pertinentes ao usuário, já na datatable, quero vincular quais perfis o usuário terá relacionado a ele! Note que o campo de pesquisa de perfil, é um AutoComplete, cuja pesquisa é oriunda do cadastro de Perfil!
Sendo assim, sempre que for necessário relacionar um novo perfil ao cadastro do usuário, através deste autoComplete, faz-se a pesquisa e com um tab ele é adicionado ao datatable!

Vi algo deste tipo em uma aplicação da AlgaWorks, mas não encontrei nada, nem minguem com exemplos deste tipo!

Se puder me ajudar, serei muito grato!
Abraço!

Criado 24 de março de 2020
Ultima resposta 25 de mar. de 2020
Respostas 2
Participantes 2