Hashtable com mais de 2 keys

6 respostas
J

Olah pessoall,

Como eh possível haver um Hashtable com mais de 2 chaves
por objeto :?:

Isso seria util para colocar uma tabela do bd inteira numa
estrutura de dados, mas como se faz para as tabelas com
mais de uma key?

Mais uma coisa, para as tabelas com key composta eu to criando uma
classe herdada de Hashtable e to “enjambrando” assim:

public void put(String key1, String key2, Object obj){ super.put(key1 + key2, obj); }

não sei se isso seria uma boa pratica de programação,
gostaria de sugestões, se possível, sobre isso.

E pena que isso soh dah pra fazer com String neh… :sad:

Abraços!

6 Respostas

V

Na verdade isso é uma péssima prática de programação, Hashtables não foram criadas para armazenar dados de uma tabela, para tal uma boa prática é armazenar os dados em Javabeans.

Quanto ao problema de duas ou mais chaves, isso seria fácilmente resolvido utilizando os javabeans e colocando-os em uma lista do tipo (ArrayList).

Qualquer dúvida, estamo aí!!
[]'s

V
uma modelagem elegante seria criar para cada entidade um objeto que represente sua chave primária, implementar o método equals() para este objeto e utilizá-lo do seguinte modo:
public class EntidadePK {
  private Integer chave1;
  private String chave2;
  private String chave3;

  // get´s e set´s
  ...

  public boolean equals(Object o) {
    if (o instanceof EntidadePK) {
      // faz o cast e compara os valores das chaves
    } else {
      super.equals(o);
    }
  }
}

public class Entidade {
  private EntidadePK pk;
  private Integer att1;
  private String att2;
  private Double att3;
  private Date att4;

  // get´s e set´s
  ...
}
quando vc for adicionar na hashtable faça assim:
HashMap reg = new HashMap();
Entidade entidade = new Entidade();
// popula os dados da entidade e da entidadePk
  ...
reg.put(entidade.getPk(), entidade);

acho q esta é mais ou menos isso...

V

“Volnei”:
Na verdade isso é uma péssima prática de programação, Hashtables não foram criadas para armazenar dados de uma tabela, para tal uma boa prática é armazenar os dados em Javabeans.

Quanto ao problema de duas ou mais chaves, isso seria fácilmente resolvido utilizando os javabeans e colocando-os em uma lista do tipo (ArrayList).

Qualquer dúvida, estamo aí!!
[]'s


o Volnei está correto, só utilize Hashtable ou qualquer outro Map se vc quiser manter em memória um cache dos dados do banco, note que isto vai consumir uma quantidade enorme de memória, e vc vai precisar balancear o tamanho inicial e a taxa de crescimento do teu Map.

J

Ok, jah to colocando javabeans no hashtable, ou seja,
para cada linha na tabela é um bean diferente.

Mas tu acha q vale a pena colocar um ArrayList
para cada linha do banco? não fica muito caro, ainda mais
se a tabela for grande?

Andei pensando… serah que eh mais facil eu criar
uma hashtable para cada tipo de key da tabela,
sendo q uma tabela de 2 keys eu terei 2 hashtables?

Veja q a segunda hashtable possui apenas referencias da
primeira, ou vice-versa, não precisando ter 2 beans redundantes…

Mas vendo por esse lado, fica dificil trabalhar com um
numero variavel de hashtables para cada tabela, ainda mais
se o banco for grande.

Nesse ponto, creio que ha varias soluções,
mas gostaria da melhor maneira possivel,
ou seja, desempenho e qualidade neh :wink:

De repente, deve haver algum pattern sobre isso,
aguardo sugestões…

Abraços.

V

“javaldir”:

Andei pensando… serah que eh mais facil eu criar
uma hashtable para cada tipo de key da tabela,
sendo q uma tabela de 2 keys eu terei 2 hashtables?

Veja q a segunda hashtable possui apenas referencias da
primeira, ou vice-versa, não precisando ter 2 beans redundantes…

Mas vendo por esse lado, fica dificil trabalhar com um
numero variavel de hashtables para cada tabela, ainda mais
se o banco for grande.

Nesse ponto, creio que ha varias soluções,
mas gostaria da melhor maneira possivel,
ou seja, desempenho e qualidade neh

vc entendeu o q eu coloquei no meu primeiro post? vc não precisa de mais de uma hashtable por tabela

J

“viecili”:
“javaldir”:

Andei pensando… serah que eh mais facil eu criar
uma hashtable para cada tipo de key da tabela,
sendo q uma tabela de 2 keys eu terei 2 hashtables?

Veja q a segunda hashtable possui apenas referencias da
primeira, ou vice-versa, não precisando ter 2 beans redundantes…

Mas vendo por esse lado, fica dificil trabalhar com um
numero variavel de hashtables para cada tabela, ainda mais
se o banco for grande.

Nesse ponto, creio que ha varias soluções,
mas gostaria da melhor maneira possivel,
ou seja, desempenho e qualidade neh

vc entendeu o q eu coloquei no meu primeiro post? vc não precisa de mais de uma hashtable por tabela

Sim cara, olhei o q tu fez, muito interessante.

Mas dê uma olhada na hora que vc e eu respoderam.
Enquanto estava formulando essa resposta vc jah
tinha respondido.

Ow, o cara nem deixa eu molhah o bico…

flw!

Criado 18 de julho de 2005
Ultima resposta 19 de jul. de 2005
Respostas 6
Participantes 3