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!