Galera boa tarde,
Como eu posso modificar o método filtrados para que ele também retorne os grupos dos usuários? Algo como (JPQL)
"from Usuario u join fetch u.grupos".
public List<Usuario> filtrados(UsuarioFilter filter) {
CriteriaBuilder builder = manager.getCriteriaBuilder();
CriteriaQuery<Usuario> query = builder.createQuery(Usuario.class);
Root<Usuario> usuarioRoot = query.from(Usuario.class);
Predicate predicate = builder.and();
if (filter.getId() != null)
predicate = builder.and(predicate, builder.equal(usuarioRoot.<Long>get("id"), filter.getId()));
if (!filter.getNome().isEmpty())
predicate = builder.and(predicate, builder.like(usuarioRoot.<String>get("nome"), "%" + filter.getNome() + "%"));
TypedQuery<Usuario> typedQuery = manager.createQuery(
query.select(usuarioRoot).where(predicate)
);
return typedQuery.getResultList();
}
@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String nome;
private String email;
private String senha;
private String telefone;
private List<Grupo> grupos = new ArrayList<>();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotBlank
@Column(nullable = false, length = 80)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@NotBlank
@Column(nullable = false, unique = false, length = 50)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(nullable = false, length = 60)
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@NotBlank
@Column(nullable = false, length = 50)
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
@NotNull
@ManyToMany
@JoinTable(name = "usuario_grupo",
joinColumns = @JoinColumn(name = "usuario_id"),
inverseJoinColumns = @JoinColumn(name = "grupo_id"))
public List<Grupo> getGrupos() {
return grupos;
}
public void setGrupos(List<Grupo> grupos) {
this.grupos = grupos;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Usuario other = (Usuario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Entity
@Table(name = "grupo")
public class Grupo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String nome;
private String descricao;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(nullable = false, length = 30)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(nullable = false, length = 80)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Grupo other = (Grupo) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
}