Estou usando hibernate e me deparei com uma dúvida existencial:
Tenho uma tabela cujo o id é um varchar, bom criei meu vo e no campo id eu coloquei varchar, até ai tudo bem, a duvida começa na hora de sobrescrever o método hashCode() que retorna um int. No iquals eu comparo cada caracter da string, se todas baterem retorno true senãoi retorno false, até ai beleza, funciona bem. Mas e no hashCode? Se meu id fosse um integer eu retornaria o id mas no caso de uma string o que retornar? SErá que o size da string é algo viavel?
Estou usando hibernate e me deparei com uma dúvida existencial:
Tenho uma tabela cujo o id é um varchar, bom criei meu vo e no campo id eu coloquei varchar, até ai tudo bem, a duvida começa na hora de sobrescrever o método hashCode() que retorna um int. No iquals eu comparo cada caracter da string, se todas baterem retorno true senãoi retorno false, até ai beleza, funciona bem. Mas e no hashCode? Se meu id fosse um integer eu retornaria o id mas no caso de uma string o que retornar? SErá que o size da string é algo viavel?
Obrigado![/quote]
Cara,
se o seru Id é uma String, não precisa comparar caractere por caractere. Usa o método equals da própria String dentro do equals.
E o hashCode, faz id.hashCode() dentro do método hashCode() do seu VO.
Cara, nem tinha pensado nisso, em usar o equals da string e o hashcode() da string mesmo, é tão óbvio e eu nem tinha pensado. Desculpem pela escapada :oops: :oops:
Vou testar mas, com certeza é isso mesmo!
VAleu!
você diz como seu hashCode vai implementar por exemplo
int hashCode(){
return variavelstring.length();
}
isso é um codigo válido para tabelas hashin porém nao muito eficiente… mais funciona! Os codigos hashing sempre usa numeros nunca usa caracteres: a,b,e…
Lembre-se que ele faz um calculo gerado pela jvm se vc nao especificar como seu hashCode() vai funcionar…
String e classes Wrapper ja implementam hashCode().