Hibernate: select this_.CD_CLIENTE as y0_, this_.CD_FILIAL as y1_ from CLIENTE this_ where y1_=? and this_.CD_VENDEDOR=?
org.hibernate.exception.GenericJDBCException: could not execute query
Column unknown
Y1_
At line 1, column 81.
Outra coisa que você pode fazer é ir eliminando o problema aos poucos. Primeiro faria a consulta normal, depois apenas colocaria as projections e depois o result transformer. Entendeu? Por partes, aí dá para isolar o erro.
Eu só não entendi uma coisa… você está querendo fazer um select filtrando pela PK, mas vai retornar uma lista de PK? Não me faz muito sentido isso.[/quote]
Vou testar… mas oque quero não são apenas as PK’s, quero limitar a quantidade de fields de retorno no sql pois isso consome muito processo…
Veja assim:
Tenho 3mil clientes, cada cliente tem 88 fields com seus dados dentro, limitando para 8 como eu quero é muito mais rapido!
[quote=maniacs]Vou testar… mas oque quero não são apenas as PK’s, quero limitar a quantidade de fields de retorno no sql pois isso consome muito processo…
Veja assim:
Tenho 3mil clientes, cada cliente tem 88 fields com seus dados dentro, limitando para 8 como eu quero é muito mais rapido! [/quote]
Mas se você está fazendo a pesquisa pela PK, entendo que vai retornar apenas 1 registro. Se retornar mais de um, então não dá para ser PK, pois pk é unica.
Me desculpe, não havia notado um detalhe, os valores vem nulos por causa do ResultTransformer. Crie o seu próprio que os valores serão setados corretamente:
[code]public class ClienteTransformer implements ResultTransformer {
public List transformList(List list) {
return list;
}
public Object transformTuple(Object[] values, String[] aliases) {
Cliente c = new Cliente();
ClienteId id = new ClienteId();
id.setRg((String)values[0]);
id.setCpf((String)values[1]);
c.setId(id);
return c;
}
Não estou filtrando por toda PK, apenas pelo cdFilial
e fazer:
ProjectionList list = Projections.projectionList();
list.add(Projections.property("clientePK"));
c.setProjection(list);
retorna como eu disse:
Estranho … se eu fazer para cada campo a projections.property ele vai tentar setar na Cliente cada field (setCdFilial…) e se for assim ele não se acha…
[quote=von.juliano]Me desculpe, não havia notado um detalhe, os valores vem nulos por causa do ResultTransformer. Crie o seu próprio que os valores serão setados corretamente:
[code]public class ClienteTransformer implements ResultTransformer {
public List transformList(List list) {
return list;
}
public Object transformTuple(Object[] values, String[] aliases) {
Cliente c = new Cliente();
ClienteId id = new ClienteId();
id.setRg((String)values[0]);
id.setCpf((String)values[1]);
c.setId(id);
return c;
}
}[/code]
Vê se agora resolve! [/quote]
Vou duplicar o post… Verdade! estava penssando em fazer isso mesmo… vou testar … tnks…
maniacs, quando falei em filtrar, eu quis dizer a WHERE do select. Filtro pra mim é quando você, por exemplo, faz um select retornando todos os nomes que começam com a letra X.
[quote=maniacs]eu faço isso para cada valor entao?
id.setRg((String)values[0]);
id.setCpf((String)values[1]);
[/quote]
Sim, como o hibernate vai te trazer um array de objects, você tem que definir na mão onde vai cada valor. Talvez exista uma forma melhor, acho que vou pesquisar isso
[quote=von.juliano][quote=maniacs]eu faço isso para cada valor entao?
id.setRg((String)values[0]);
id.setCpf((String)values[1]);
[/quote]
Sim, como o hibernate vai te trazer um array de objects, você tem que definir na mão onde vai cada valor. Talvez exista uma forma melhor, acho que vou pesquisar isso
Flw! :thumbup: [/quote]
To fazendo para ele usar reflect assim faz automatico… no momento vou deixar um a um para poder passar para os outros problemas… mas ja comecei algumas coisas com reflect