No meu retorno do terminal o nome do funcionário está retornando null e o resto tem o retorno normal
Segue o retorno
Pesquisa Gerada
Funcionario Id: 1 Nome: null Salario: 1000.00 CPF: 123456
Funcionario Id: 2 Nome: null Salario: 2000.00 CPF: 123
Funcionario Id: 3 Nome: null Salario: 500.00 CPF: 654321
Segue meu funcionario repository
/projecoes
@Query(value = "SELECT f.id, f.nome_funcionario, f.salario, f.cpf FROM funcionarios f", nativeQuery = true)
List<FuncionarioProjecao> findFuncionarioSalario();
Minha Interface de Projeção
public interface FuncionarioProjecao {
Integer getId();
String getNome();
BigDecimal getSalario();
String getCpf();
}
minha classe funcionario
package br.com.alura.spring.data.orm;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
@Entity
@Table(name = "funcionarios")
public class Funcionario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String nome;
private String cpf;
private BigDecimal salario;
private LocalDate dataContratacao = LocalDate.now();
@ManyToOne
@JoinColumn(name = "cargo_id", nullable = false)
private Cargo cargo;
@Fetch(FetchMode.SELECT)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "funcionarios_unidades", joinColumns = {
@JoinColumn(name = "fk_funcionario")},
inverseJoinColumns = {@JoinColumn(name = "fk_unidade")})
private List<UnidadeTrabalho> unidadeTrabalhos;
public Funcionario() {
}
public Funcionario(String nome, String cpf, BigDecimal salario, LocalDate dataContratacao) {
this.nome = nome;
this.cpf = cpf;
this.salario = salario;
this.dataContratacao = dataContratacao;
}
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 String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public BigDecimal getSalario() {
return salario;
}
public void setSalario(BigDecimal salario) {
this.salario = salario;
}
public LocalDate getDataContratacao() {
return dataContratacao;
}
public void setDataContratacao(LocalDate dataContratacao) {
this.dataContratacao = dataContratacao;
}
public Cargo getCargo() {
return cargo;
}
public void setCargo(Cargo cargo) {
this.cargo = cargo;
}
public List<UnidadeTrabalho> getUnidadeTrabalhos() {
return unidadeTrabalhos;
}
public void setUnidadeTrabalhos(List<UnidadeTrabalho> unidadeTrabalhos) {
this.unidadeTrabalhos = unidadeTrabalhos;
}
@Override
public String toString() {
return "Funcionario{" +
"id=" + id +
", nome='" + nome + '\'' +
", cpf='" + cpf + '\'' +
", salario=" + salario +
", dataContratacao=" + dataContratacao +
", cargo=" + cargo +
", unidadeTrabalhos=" + unidadeTrabalhos +
'}';
}
}
A Service de Projecao
private void pesquisaFuncionarioSalario() {
System.out.println("Pesquisa Gerada");
List<FuncionarioProjecao> list = funcionarioRepository.findFuncionarioSalario();
list.forEach(f -> System.out.println(
"Funcionario Id: " + f.getId() +
" Nome: " + f.getNome() +
" Salario: " + f.getSalario() +
" CPF: " + f.getCpf()));
}
Até coloquei o atributo CPF pra testar o tipo String mas o CPF aparece sem problemas.