Melhorando a performance da consulta;

estou tentando fazer apenas 1 consulta, que possa trazer todas as minhas de uma unica vez, ex: Tenho uma tabela de Carro e modeloCarro, vejamos que ele faz varias vezes select no modelo carro, como faço para melhorar essa forma de consulta?

@Test
	public void exemploJoinFect(){
		CriteriaBuilder builder = manager.getCriteriaBuilder();
	 	CriteriaQuery<Carro> criteriaQuery = builder.createQuery(Carro.class);
	 	
	 	Root<Carro> carro = criteriaQuery.from(Carro.class);
	 	
	 	TypedQuery<Carro> query = manager.createQuery(criteriaQuery);
	 	Join<Carro, ModeloCarro> modeloCarro = (Join) carro.fetch("modeloCarro"); //Já traz as propriedados do modeloCarro
	 	
	 	List<Carro> carros = query.getResultList();
	 	
	 	for(Carro c : carros){
	 		System.out.println(c.getAno() +" -" + c.getModeloCarro().getNome());
	 	}
	}

Log da Consulta.

Hibernate: 
    select
        carro0_.codigo as codigo1_0_,
        carro0_.ano as ano2_0_,
        carro0_.cor as cor3_0_,
        carro0_.codigo_modeloCarro as codigo_m5_0_,
        carro0_.placa as placa4_0_ 
    from
        Carro carro0_
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2010 -Corolla XEI
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2001 -Hilux
2121 -Corolla XEI
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2006 -Frontier
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2018 -Onix
2010 -Onix
2010 -Onix
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2010 - Fiat Uno
2009 - Fiat Uno
Hibernate: 
    select
        modelocarr0_.codigo as codigo1_4_0_,
        modelocarr0_.categoria as categori2_4_0_,
        modelocarr0_.codigo_fabricante as codigo_f4_4_0_,
        modelocarr0_.nome as nome3_4_0_ 
    from
        modelo_carro modelocarr0_ 
    where
        modelocarr0_.codigo=?
2010 - Bravo
2008 - Bravo

Meu Modelo

@Entity
@Data
public class Carro implements Serializable {

	public Carro() {
	
	}

	public Carro(String placa, String cor) {
		this.placa = placa;
		this.cor = cor;
	}
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long codigo;
	
	@NotBlank
	@NotNull
	@Pattern(regexp="([a-zA-Z]{3}-\\d{4})?")
	@Size(max=8) 
	@Column(unique = true,nullable = false , length=8)
	private String placa;
	
	@NotBlank
	@NotNull
	@Size(max=15) 
	@Column(nullable = false , length=15)
	private String cor;
	
	@NotBlank
	@NotNull
	@Pattern(regexp="\\d{4}")
	@Column(length=4)
	private String ano;
	
	@ManyToOne(fetch =FetchType.LAZY,cascade = CascadeType.ALL)
	@JoinColumn(name="codigo_modeloCarro")
	private ModeloCarro modeloCarro;

@Entity
@Table(name = “modelo_carro”)
@Data
public class ModeloCarro implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;

@NotNull
@NotBlank
@Size(max = 30, min = 2)
@Column(nullable = false, length = 30)
private String nome;

@Enumerated(EnumType.STRING)
private Categoria categoria;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "codigo_fabricante")
private Fabricante fabricante;

public boolean isCarroNovo() {
	return this.getCodigo() == null;
}

public boolean isExistente() {
	return !isCarroNovo();
}

}