Há várias razões pelas quais é importante assegurar que suas chaves principais estejam definidas corretamente.
Em primeiro lugar, a computação de assinaturas de chave para objetos torna-se mais cara à medida que mais propriedades são marcadas como principais. Se todos os campos do Usuário fossem marcados como principais, neste caso, para cada Usuário, o sistema teria que acessar cada uma dessas propriedades e computar uma assinatura que incluísse os valores de cada uma das propriedades. O problema torna-se complexo se um campo for uma referência para outro objeto. Portanto, como regra geral, as chaves principais com Dados de Cliente devem seguir as mesmas regras que as chaves principais do banco de dados: um único campo, preferivelmente um inteiro, é a chave mais eficiente. Chaves mais complexas, incluindo o que é gerado por padrão onde todo campo único válido é marcado como principal, funcionam tão bem quanto as chaves mínimas, mas executam mais lentamente.
Em segundo lugar, você deve evitar ciclos de referência em atributos principais. Por exemplo, se você tiver um objeto Usuário que possui um Endereço, o Endereço tiver um ponteiro de volta para o objeto Usuário e user.address e address.user forem campos principais, haverá um loop infinito ao determinar a identidade desses dois objetos. Isso é intuitivo, mas pode ser difícil de ser controlado no código. Neste caso, o sistema funcionará contanto que os Objetos Java sejam consistentes: o objeto Usuário para o qual o Endereço aponta é exatamente o mesmo objeto Usuário do Java que apontou para o objeto Endereço, para que um teste de igualdade de referência do objeto simples, como theUser = theUser.getAddress().getUser(), retorne true.
Por último, e este é um problema muito mais difícil, suponha que todos os campos sejam considerados Principais (o padrão) e você faça alterações em um determinado objeto e tenha perdido a identidade anterior do objeto. Como todos os campos fazem parte da identidade, quaisquer alterações tornam a identidade inconstante. Esse é um problema real ao utilizar recursos mais avançados da estrutura, por exemplo, WebServices, em que você espera obter atualizações do servidor sobre objetos que possam já ter sido modificados pelo usuário no navegador.
Termos de Utilização |
Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.