Como utilizar campos string em equals e hashCode?

Beleza galera?

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=samurai]Beleza galera?

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.

Beleza?

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!

Quando usar strings e classes wrappers é bom reutilizar equals e hashCode das proprias classes e não reiventar a roda.

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… :smiley:
String e classes Wrapper ja implementam hashCode().

espero ter ajudado :smiley: