Olá amigos, acabei de fechar um tópico relacionado a minha JTable onde pegava os dados.
É o seguinte, eu peguei em minha table um campo onde armazenei em um array de Strings.
No meu caso o campo Itens Retirados eu guardei em um Strin[] itensRetirados.
Até ae tudo beleza… setei meu list e tudo legal.
Mas como eu faço para salvar no BD um array de Strings com o Hibernate.
Ele está dando erro no mapeamento dizendo que é impossível fazer o cast de String para String[].
Os amigos tem alguma idéia de como eu posso fazer, estive olhando aqui no fórum e alguns amigos não aconselham gravar arrays de String no BD… qual seria a outra alternativa?
Modelo.hbm.xml
[code]<?xml version="1.0"?>
church_saidapatrimonio_id_seq
[/code]
Método que enche a list retornando um Object (está em meu modelo dá Table)
public Object[][] getAllItems(){
int row = getRowCount();
int col = getColumnCount();
Object[][] dados =new Object[row][1];
for(int i=0;i<row;i++){
dados[i][0] = getValueAt2(i, 0);
//dados[i][1] = getValueAt2(i, 1);
//dados[i][2] = getValueAt2(i, 2);
}
return dados;
}[/code]
Tela onde encho o array:
[code]public List<SaidaPatrimonio> getAllItems(){
Object[][] dados = model.getAllItems();
List<SaidaPatrimonio>list = new ArrayList();
SaidaPatrimonio s = new SaidaPatrimonio();
int tam = dados.length;
s.setNomePessoaPegou(txtNomePessoaPegou.getText());
String data = new SimpleDateFormat("dd/MM/yyyy").format(txtDataRetirada.getDate());
s.setDataRetirada(data);
String [] descricoes = new String [tam];
for(int i=0;i<tam;i++){//ver aqui que está dando o erro... usar o debug para ver os valores corretos
descricoes[i] = String.valueOf(dados[i][0]);
}
s.setItensRetirados(descricoes);
list.add(0, s);
return list;
}
Então cara, essa sua coluna itensretirados está como no banco ?? varchar ??
Tipo, para mapear um array, você deveria utilizar a tag dentro do seu hbm.xml. Mas se não me engano, isso representa um relacionamento one-to-many ou many-to-one. Não sei se é o seu caso.
Se voce tem um array te itens retirados e deseja salvar em uma única coluna, acho que você deve pensar em utilizar uma string com um delimitador
Ex. Item1;Item2;Item3 - Tudo isso é uma unica String.
Depois você poderia transforma-la em array novamente, separando pelo delimitador “;”.
Porém, ao invés de gravar tudo como array de String em um campo da tabela, porque não usar o método tradicional, que é criar uma segunda tabela e fazer um relacionamento ManyToOne. Usando hibernate isso vai ficar bastante simples de fazer
não faz desse jeito, crie uma tabela para esse seu caso, vai ficar dentro da forma normal de BD e alem disso, se vc precisar realizar alguma consulta para em cima desse dados do jeito que vc ta querendo nao vai ter jeito.
Olá amigo.
Estou pensando cara, por isso to precisando da ajuda de vcs…rsrrs
Não tenho muitoa experiência com o hibernate, por isso que aprender com os amigos qual a melhor maneira pra depois não ter que ficar alterando tudo entende?
Como os amigos fariam nesse caso?
isso nao é problema de hibernate, isso vai ser problema de relacionamento do seu banco. como eu te disse seria melhor vc criar uma tabela para esse caso.
Olá alissonvla.
Criei essa tabela cara, mas não estou conseguindo obter êxito no relacionamento, entende?
E também não imagino como ficaria o insert nela… Eu criei a tabela com os campos id e itens…
fiz o que vc falou mas a partir dae preciso de uma luz para saber como proceder!.
Obrigado pela força cara!
vc ta dando manutenção nesse seu projeto ou ta começando?
pq se vc tiver começando do zero, utilize anotação ao inves de xml, é mais simples de trabalhar.
vc ta dando manutenção nesse seu projeto ou ta começando?
pq se vc tiver começando do zero, utilize anotação ao inves de xml, é mais simples de trabalhar.
t+[/quote]
Cara eu tenho um projeto feito todo em hibernate annotations, e se fosse começar hoje do zero ele de novo ia fazer tudo em XML, primeiro por achar muito mais coisa em XML do que annotations
segundo pela manutenção além de certas coisas só ser possível em XML, pelo menos foi o que descobrir quando precisava de alguma coisas mais complexa, usando annotations parecia gambiarra.
Olá amigos.
Pessoal fiz o que o amigo alex.brito me falou e ele parou o erro… até ae beleza…
Só que agora eu preciso mandar esse relacionamento que fiz no hibernate para o banco como eu faço?
E segundo, como faço para dar o insert nessa tabela itensRetirados…
Realmente não estou imaginando como…
O relacionamento é 1 Saída para N itens retirados…
Obrigado amigos
Pergunto isso porque esse cascade=“all”, garante que quando voce inserir e/ou atualizar e/ou excluir uma SaidaPatrimonio ele deve pegar sua lista (array) de itens retirados e executar umas dessas operações também, em cascata.
Olá amigo.
Acabo de tentar inserir e ele me volta o erro: Contraint Violation Exception
Mas minha tabela itensretirados não tem primary key… a única mudança que eu fiz foi colocar na tabela SaidaPatrimonio no campo itens eu mudei o tipo para um tipo integer para pegar o id da tabela itensretirados…
Nunca mexi com esse tipo de relação então minha dúvida é… quando eu for fazer um insert no saidaPatrimonio ele vai automaticamente fazer o insert na tabela itensRemovidos…???
Ou terei que bolar uma lógica fazer o insert na saidapatrimonio e depois no itensremovidos…
Obrigado amigos
[code]public List getAllItems(){
Object[][] dados = model.getAllItems();
Listlist = new ArrayList();
SaidaPatrimonio s = new SaidaPatrimonio();
int tam = dados.length;
s.setNomePessoaPegou(txtNomePessoaPegou.getText());
String data = new SimpleDateFormat(“dd/MM/yyyy”).format(txtDataRetirada.getDate());
s.setDataRetirada(data);
String [] descricoes = new String [tam];
ItensRetirados [] itens = new ItensRetirados[tam];
for(int i=0;i<tam;i++){//ver aqui que está dando o erro… usar o debug para ver os valores corretos
descricoes[i] = String.valueOf(dados[i][0]);
//aqui está dando nullPointerException também, não sei porque...rsrsr
itens[i].setItens(descricoes[i]);
}
s.setItensRetirados(itens);
list.add(0, s);
return list;
}[/code]
Meu controle:
[code]if(comando.equals(“btnCadastrar”)){
try{
List lista = new ArrayList();
lista = tela.getAllItems();
SaidaPatrimonio s = new SaidaPatrimonio();
s.setDataRetirada(lista.get(0).getDataRetirada());
s.setNomePessoaPegou(lista.get(0).getNomePessoaPegou());
ItensRetirados [] itensRetirados = lista.get(0).getItensRetirados();
s.setItensRetirados(itensRetirados);
//s.setItensRetirados(itens);
DAOSaidas daoSaidas = new DAOSaidas();
daoSaidas.insert(s);
}
catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro ao cadastrar a saída:"+e,"ERRO",JOptionPane.ERROR_MESSAGE);
}
}[/code]
Sobre como inserir, se seu objeto saida estiver com o array de itens preenchidos, quando voce salvar uma saida, ele ira salvar os itens retirados. Pois o cascade está ativado.