olha eu de novo…rs…olá a todoss!
Eu tenho uma tabela de ligação…e gostaria de saber como eu faço para populá-la…(como fica o DAO). As tabelas são Satelite, Estacao e Est_Sat. Inclui, altero e deleto perfeitamente em Satelite e Estacao, acrescentei no mapeamento das duas classes o many-to-many e beleza…está certo… pq quando o mapeamento não está correto nenhuma operação dá certo fazer (é web meu projeto). Só q agora não sei COMO fazer para incluir dados em Est_Sat, cujos unicos campos são id_sat e id_estacao e estes são CHAVES PRIMARIAS, E FKs AO mesmo tempo.
Como fazer???
olha eu de novo…
Acredito que você tenha uma coleção de “Estacao” na classe Satelite, tem?
Se tiver, é só você incluir registros nessa coleção e mandar persistir o objeto Satelite que ele vai incluir os dados nessa tabela intermediaria…
pior q eu nao tenho uma colecao nesta classe…
olha só:
class Satelite(){
int id_sat;
String desc_sat;
String dir_sat;
//getter e setters
}
class Estacao(){
String id_estacao;
//esta é FK
int id_cidade ;
float lat_estacao;
float lon_estacao;
Cidade cidade;
//getters e setters
}
espero q possa me ajudar!
agora vou! até amanha!
Mas então as duas não tem nenhum relacionamento, pra você mapear um relacionamento many-to-many, você precisa de coleções nas classes…
ahh entendi…qdo eu digo ManytoMany bate no que eu expliquei lah em cima…p que eu quero fazer. No banco eu jah tenho uma tabela chamada
sat_x_estacao que soh tem dois campos que sao a chave composta: id_sat e id_estacao. Eh esta tabela q nao to sabendo popular via aplicacao.
Mais uma vez…tem como vc me mandar em exemplo como eu faco estas colections para minhas classes? como vai ficar em cada um dos lados?
até e valeu
Seria algo parecido com isso:
[code]class Satelite(){
int id_sat;
String desc_sat;
String dir_sat;
}
class Estacao(){
String id_estacao;
int id_cidade ;
float lat_estacao;
float lon_estacao;
Cidade cidade;
Set satelites;
}[/code]
Ok. Mas não é somente estação que tem vários satélites…e sim satélites também têm várias estações. Ok…aí eu coloco um Set estação em Satelite tambem. Mas me dê um exemplo de como eu vou persistir o id_fonte e id_estacao que eu desejar na tabela
Sat_Estacao. COMOO??
Seria algo mais ou menos assim:
[code]satelite.getEstacoes().add(estacao);
estacao.getSatelites().add(satelite);
session.persist(estacao);
session.persist(satelite);[/code]
OK! Eu fiz isto, em um arquivo chamado SatEstDAO.java…dentro do meu método para inserir dados. Olha o erro que deu:
“caminho” .java:44: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.Collection
estacao.getSatelites().add(satelite);
O que está acontecendo? os tipos estão como Collection mesmo nos VOs…jah fiz como HashSet como eu estou fazendo para os outros mas deu o mesmo erro…
Isso não é um erro, é só um alerta, tá te dizendo que o Set pode ser parametrizado com generics para tornar as conversões de tipos mais seguras e mais faceis… Seria assim:
[code]class Satelite(){
int id_sat;
String desc_sat;
String dir_sat;
Set<Estacao> estacoes;
}
class Estacao(){
String id_estacao;
int id_cidade ;
float lat_estacao;
float lon_estacao;
Cidade cidade;
Set<Satelite> satelites;
}[/code]
Mas você não precisa usar isso se não quiser…
OK!
Eu tentei rodar assim mas não inseriu os meus dados no banco. Eu debuguei o programa e o erro é NullPointerException. Lembre que minha aplicação é JSP, neste caso eu entrei com o código do satelite e o codigo da estacao via um textbox na página.
Eu criei um SatEstacaoDAO para fazer a persistencia (o código q vc me passou acima), será que seria necessário eu criar um SatEstacaoVO para setar os atributos que eu quero (os dois IDs no caso)? Minha cabeca está dando um nó…
Não saia criando classe pra tudo que você achar, se não daqui a pouco seu modelo de classes não faz o menor sentido mais…
O erro deve ser porque as coleções estão nulas…
[code]class Satelite(){
int id_sat;
String desc_sat;
String dir_sat;
Set estacoes = new HashSet();
}
class Estacao(){
String id_estacao;
int id_cidade ;
float lat_estacao;
float lon_estacao;
Cidade cidade;
Set satelites = new HashSet();
}[/code]
Nossa cara, deu certo !!!
valeu valeu valeu!!
Vc é fera msm!