pessoal, tenho seguinte:
@ManyToOne(optional = false)
private Profissional profissional;
Mas o hibernate carrega todos os campos da classe Profissional, eu preciso somente do id e do nome, não preciso do restante dos campos.
Há a possibilidade de especificar quais campos eu quero que traga no join?
Obrigado!
Tem algum motivo em especial pra fazer isto? Usando criteria você pode utilizar uma projeção e especificar os campos que quer trazer, mas não é recomendável, além de ser mais trabalhoso:
return session.createCriteria(Profissional.class, "p")
.setProjection(Projections.projectionList()
.add( Projections.property("p.id").as("id") )
.add( Projections.property("p.nome").as("nome") )
).setResultTransformer(new AliasToBeanResultTransformer(Profissional.class)).list();
Se a tua classe tem muitas propriedades, o ideal é dividir em classes menores.
Começar a fazer isto só vai te dar mais trabalho e pode indicar uma falha de modelagem.
wagnerfrancisco, não é bem isto
é tipo, digamos que a lista de profissionais esta dentro de empresa e eu faça isto:
Empresa empresa = new EmpresaDAO(session).load(1);
String nomeProfissional = empresa.getProfissionais().get(0).getNome();
Neste exemplo eu pego o primeiro profissional que voltar da empresa 1!
Como a minha lista de profissionais é lazy, quando eu chamo ela, o hibernate vai buscar no banco, mas ele busca todos os campos da tabela profissionais, eu gostaria que ele trouxesse somente o id e o nome.
Eu já uso este exemplo que você mostrou, mas em outros caso, eu precisaria fazer isto diretamente na modelagem da classe.
O a diferença do custo entre trazer nome e idade e trazer, nome idade cor peso apelido é 0.
Deixe-me dar um chute aqui… Seu problema em trazer profissionais e seus campos é que além de trazer as informações do profissional e ele está trazendo outras listas que está “travando” a consulta…
Acertei?
Não Herbert, minhas listas são todas lazy, não teria este problema
eu só me incomodei com os campos desnecessários que estão vindo, como você faz esta comparação? De que trazer tudo ou trazer só alguns é a mesma coisa?
[quote=Raiduster]Não Herbert, minhas listas são todas lazy, não teria este problema
eu só me incomodei com os campos desnecessários que estão vindo, como você faz esta comparação? De que trazer tudo ou trazer só alguns é a mesma coisa?[/quote]Eu achei que esse era o problema pois seu texto deu a entender que você usa o objeto.getList() para trazer a lista lazy, ou seja com uma segunda volta ao DB o que não é boa prática. ^^
Roda a mesma query um monte de vez com todos os campos e depois sem. Para testar o lazy, coloque os outros campos com @Basic e com a opção lazy.