Exibir o nome do objeto ao invés do id no Angular com Spring

Olá pessoal! Estou tendo um probleminha aqui. Eu tenho um mat-select que lista alunos a cadastrados, quando seleciono o aluno na minha tabela só exibi o id do objeto. Só que eu quero que exiba o nome.

front:

<div class="aluno">
  <mat-form-field class="full-width" appearance="outline">
    <mat-label>Selecione um Aluno</mat-label>
    <mat-select
    [(ngModel)]="turma.aluno"
    name="alunos" 
    [formControl]="aluno" 
    required>
      <mat-option *ngFor="let al of alunos" value="{{ al.id }}">{{ al.nome }}</mat-option>
    </mat-select>
  </mat-form-field>
</div>

Não entendi. Na tabela está apresentando o valor fgfggb. Era para estar apresentando outro valor?

então… esse " fgfggb" desconsidera eu só escrevi para o campo não ficar em branco, o que eu estava querendo era saber como eu fazia para exibir o nome do aluno ao invés do id mais já consegui resolver aqui. Obrigado! :slight_smile:

Agora eu estou querendo resolver outro problema. Estou tentando pegar um relacionamento de muitos para muitos só que não está dando certo. Se você observar o id e o nome do aluno está sendo selecionado é isso que eu estou querendo para a linha professores e nomeProfessor de turma e também da linha turma e nomeTurma do Profissional. Se poder me ajudar vou ficar muito agradecido, já tem uns dias que estou tentado resolver mais sem sucesso.

esse é o meu JSON Turma que é relacionado a Profissional:
[ {
“id”: 1,
“nomeTurma”: “Borges 2”,
“professores”: 1823466252,
“aluno”: 1,
“nomeProfessor”: “java.util.stream.ReferencePipeline$3@2eaea142”,
“nomeAluno”: “João Borges”
} ]

Esse é o Profissional:

[ { “id”: 2,
“nome”: “Joana Marques”,
“nascimento”: “1995-06-25T03:00:00.000+00:00”,
“sexo”: “Feminino”,
“cpf”: “957.443.730-20”,
“rg”: “mg19.599.003”,
“telefone”: “(38)99927-6907”,
“endereco”: “rua: batista”,
“numero”: 17,
“bairro”: “veredinha”,
“cep”: “38689-000”,
“cidade”: “chapada”,
“estado”: “minas Gerais”,
“zona”: “urbana”,
“turma”: 1346587996,
“nomeTurma”: “java.util.stream.ReferencePipeline$3@5912e82b”
} ]

Vc está retornando a entidade direto no endpoint? Se sim, tente trabalhar com DTOs para fazer isso.

Estou usando DTO, mais acho que estou fazendo errado.
Esse Json que eu postei é do DTO.

Como vc está criando o DTO para retornar os dados?

Minha Classe domain:

@Entity
public class Profissional extends Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToMany(mappedBy=“professor”, cascade = CascadeType.ALL)
private List turma = new ArrayList<>();
public Profissional() {
super();
}
public Profissional(Integer id, String nome, Date nascimento, String sexo, String cpf, String rg, String telefone,
String endereco, Integer numero, String bairro, String cep, String cidade, String estado, String zona) {
super(id, nome, nascimento, sexo, cpf, rg, telefone, endereco, numero, bairro, cep, cidade,
estado, zona);
}

public List<Turma> getTurma() {
	return turma;
}
public void setTurma(List<Turma> turma) {
	this.turma = turma;
}	

}

Minha classe DTO:

public class ProfissionalDTO implements Serializable{
private static final long serialVersionUID = 1L;
private Integer id;
//@NotBlank(message = “Campo NOME não pode ser vasio!”)
private String nome;
//@NotNull(message = “Campo NASCIMENTO não pode ser vasio!”)
@DateTimeFormat(pattern = “dd/MM/yyyy”)
@Temporal(TemporalType.DATE)
@Column(name = “nascimento”)
private Date nascimento;

//@NotBlank(message = "Campo SEXO não pode ser vasio!")
private String sexo;	
//@NotBlank(message = "Campo CPF não pode ser vasio!")
private String cpf;
//@NotBlank(message = "Campo RG não pode ser vasio!")
@Length(max = 12, message = "O RG não pode ser maior que {max} caracteres!")
@Column(name = "rg", length = 12, nullable = false)
private String rg;
//@NotBlank(message = "Campo TELEFONE não pode ser vasio!")
private String telefone;

//@NotBlank(message = "Campo ENDEREÇO não pode ser vasio!")
private String endereco;
//@NotNull(message = "Campo NÚMERO não pode ser vasio!")
private Integer numero;
//@NotBlank(message = "Campo BAIRRO não pode ser vasio!")
private String bairro;
//@NotBlank(message = "Campo CEP não pode ser vasio!")
private String cep;
//@NotBlank(message = "Campo CIDADE não pode ser vasio!")
private String cidade;
//@NotBlank(message = "Campo ESTADO não pode ser vasio!")
private String estado;
//@NotBlank(message = "Campo ZONA não pode ser vasio!")
private String zona;	
private Integer turma;
private String nomeTurma;
public ProfissionalDTO() {
	super();
}	
public ProfissionalDTO(Profissional obj) {
	super();
	this.id = obj.getId();
	this.nome = obj.getNome();
	this.nascimento = obj.getNascimento();
	this.sexo = obj.getSexo();
	this.cpf = obj.getCpf();
	this.rg = obj.getRg();
	this.telefone = obj.getTelefone();
	this.endereco = obj.getEndereco();
	this.numero = obj.getNumero();
	this.bairro = obj.getBairro();
	this.cep = obj.getCep();
	this.cidade = obj.getCidade();
	this.estado = obj.getEstado();
	this.zona = obj.getZona();
	this.turma = obj.getTurma().stream().map(x -> x.getId()).collect(Collectors.toList()).hashCode();
	this.nomeTurma = obj.getTurma().stream().map(i -> i.getNomeTurma()).collect(Collectors.toList()).toString();
}	
public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public Date getNascimento() {
	return nascimento;
}
public void setNascimento(Date nascimento) {
	this.nascimento = nascimento;
}
public String getSexo() {
	return sexo;
}
public void setSexo(String sexo) {
	this.sexo = sexo;
}
public String getCpf() {
	return cpf;
}
public void setCpf(String cpf) {
	this.cpf = cpf;
}
public String getRg() {
	return rg;
}
public void setRg(String rg) {
	this.rg = rg;
}
public String getTelefone() {
	return telefone;
}
public void setTelefone(String telefone) {
	this.telefone = telefone;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Integer getNumero() {
	return numero;
}
public void setNumero(Integer numero) {
	this.numero = numero;
}
public String getBairro() {
	return bairro;
}
public void setBairro(String bairro) {
	this.bairro = bairro;
}
public String getCep() {
	return cep;
}
public void setCep(String cep) {
	this.cep = cep;
}
public String getCidade() {
	return cidade;
}
public void setCidade(String cidade) {
	this.cidade = cidade;
}
public String getEstado() {
	return estado;
}
public void setEstado(String estado) {
	this.estado = estado;
}
public String getZona() {
	return zona;
}
public void setZona(String zona) {
	this.zona = zona;
}
public Integer getTurma() {
	return turma;
}
public void setTurma(Integer turma) {
	this.turma = turma;
}
public String getNomeTurma() {
	return nomeTurma;
}
public void setNomeTurma(String nomeTurma) {
	this.nomeTurma = nomeTurma;
}	

}

Classe domain Turma:

@Entity
public class Turma implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nomeTurma;

@ManyToOne()
@JoinColumn(name = "aluno_id")
private Aluno aluno;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "Professor_Turma", joinColumns = { @JoinColumn(name = "professor_id") }, inverseJoinColumns = {
		@JoinColumn(name = "turma_id") })
private List<Profissional> professor = new ArrayList<>();

public Turma() {
	super();
}

public Turma(Integer id, String nomeTurma, Aluno aluno, List<Profissional> professor) {
	super();
	this.id = id;
	this.nomeTurma = nomeTurma;
	this.aluno = aluno;
	this.professor = professor;
}

@Override
public int hashCode() {
	return Objects.hash(id);
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Turma other = (Turma) obj;
	return Objects.equals(id, other.id);
}
public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getNomeTurma() {
	return nomeTurma;
}
public void setNomeTurma(String nomeTurma) {
	this.nomeTurma = nomeTurma;
}
public List<Profissional> getProfessor() {
	return professor;
}
public void setProfessor(List<Profissional> professor) {
	this.professor = professor;
}
public Aluno getAluno() {
	return aluno;
}
public void setAluno(Aluno aluno) {
	this.aluno = aluno;
}

}

Classe DTO:

public class TurmaDTO implements Serializable {
private static final long serialVersionUID = 1L;

private Integer id;
private String nomeTurma;

private Integer professores;
private Integer aluno;

private String nomeProfessor;
private String nomeAluno;

public TurmaDTO() {
	super();
}

public TurmaDTO(Turma obj) {
	super();
	this.id = obj.getId();
	this.nomeTurma = obj.getNomeTurma();
	this.aluno = obj.getAluno().getId();
	this.professores = obj.getProfessor().stream().map(i -> i.getId()).collect(Collectors.toList()).hashCode();
	this.nomeAluno = obj.getAluno().getNome();
	this.nomeProfessor = obj.getProfessor().stream().map(i -> i.getNome()).collect(Collectors.toList()).toString();

}
public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getNomeTurma() {
	return nomeTurma;
}
public void setNomeTurma(String nomeTurma) {
	this.nomeTurma = nomeTurma;
}
public Integer getProfessores() {
	return professores;
}
public void setProfessores(Integer professores) {
	this.professores = professores;
}
public Integer getAluno() {
	return aluno;
}
public void setAluno(Integer aluno) {
	this.aluno = aluno;
}
public String getNomeProfessor() {
	return nomeProfessor;
}
public void setNomeProfessore(String nomeProfessor) {
	this.nomeProfessor = nomeProfessor;
}
public String getNomeAluno() {
	return nomeAluno;
}
public void setNomeAluno(String nomeAluno) {
	this.nomeAluno = nomeAluno;
}

}

Eu até consegui fazer o relacionamento de um para muitos agora estou seguindo a mesma logica de muitos para muitos para ver se da certo. Estou conseguindo fazer a exibição na tabela só que está vindo o id = 1 e o nomeTurma= [] veja abaixo:

image

image