Dúvida Hibernate

5 respostas
Marcos_Roberto_DJ

Pessoal Help!

criei um método no meu programa que pesquisa em um arquivo texto coordenadas latitude longitude e para cada coordenada ele adiciona tbm uma informacao num mês e ano no banco d dados.
até aí tá td certinho
só que eu quero criar uma maneira para que caso já exista no banco uma informação para uma coordenada num certo mês e ano essa informação não seja adicionada.

estou usando o Hibernate.

segue o código:

public boolean importar() {
        int x = 1;
        //para cada linha do arquivo
        try {
            BufferedReader lerArquivo = null;
            FileReader fr = null;
            Coordenada coord = null;
            Coordenada coordTemp = null;
            Informacao info = null;
            int mes = 0;
            int ano = 0;

            if (arquivo == null || !arquivo.exists()) {
                return false;
            } else {
                fr = new FileReader(arquivo);
                lerArquivo = new BufferedReader(fr);
            }
            String linha = null;
            StringTokenizer st = null;
            int i = 0;
            Date inicio = new Date();
            Date fim = null;
            while ((linha = lerArquivo.readLine()) != null) {
                i++;
                if (i == 4) {

                    String letras = linha;

                    if (letras.substring(22, 25).equals("Jan")) {
                        mes = 1;
                    } else if (letras.substring(22, 25).equals("Feb")) {
                        mes = 2;
                    } else if (letras.substring(22, 25).equals("Mar")) {
                        mes = 3;
                    } else if (letras.substring(22, 25).equals("Apr")) {
                        mes = 4;
                    } else if (letras.substring(22, 25).equals("May")) {
                        mes = 5;
                    } else if (letras.substring(22, 25).equals("Jun")) {
                        mes = 6;
                    } else if (letras.substring(22, 25).equals("Jul")) {
                        mes = 7;
                    } else if (letras.substring(22, 25).equals("Aug")) {
                        mes = 8;
                    } else if (letras.substring(22, 25).equals("Sep")) {
                        mes = 9;
                    } else if (letras.substring(22, 25).equals("Oct")) {
                        mes = 10;
                    } else if (letras.substring(22, 25).equals("Nov")) {
                        mes = 11;
                    } else if (letras.substring(22, 25).equals("Dec")) {
                        mes = 12;
                    }

                    ano = Integer.parseInt(letras.substring(25, 29));
                } else if (i >= 10) {
                    //instaciar uma coordenada
                    coord = new Coordenada();
                    st = new StringTokenizer(linha);
                    coord.setLatitude(new BigDecimal(st.nextToken()));
                    coord.setLongitude(new BigDecimal(st.nextToken()));
                    //instaciar uma informação
                    info = new Informacao();
                    info.setMes(mes);
                    info.setAno(ano);
                    info.setTemperatura(new BigDecimal(st.nextToken()));

                    coordTemp = daoCoordenada.obter(coord);
                    if (coordTemp != null) {
                        //se a coordenada já está no banco grava-se apenas a informação
                        
                        
                        if (coordTemp.getInformacaoList() == null) {
                            coordTemp.setInformacaoList(new ArrayList<Informacao>());
                            
                        }                      
                        info.setCoordenada(coordTemp);
                        coordTemp.getInformacaoList().add(info);
                        if (!daoCoordenada.criar(coordTemp)) {
                            return false;
                        }
                    } else {
                        //senão grava-se a coordenada e a informação
                        coordTemp = coord;
                        if (coordTemp.getInformacaoList() == null) {
                            coordTemp.setInformacaoList(new ArrayList<Informacao>());
                        }
                        info.setCoordenada(coordTemp);
                        coordTemp.getInformacaoList().add(info);
                        if (!daoCoordenada.criar(coordTemp)) {
                            return false;
                        }
                    }
                    if (i % 250 == 0) {
                        fim = new Date();
                        System.out.println("250 registros foram importados");
                        System.out.println("Tempo (s): " + (fim.getTime() - inicio.getTime()) / 1000F);
                        System.out.println("Remessa de Dados nº: " + (x++));
                        inicio = new Date();
                    }
                }
            }
            lerArquivo.close();
            return true;
        } catch (Exception ex) {
            System.err.println("Erro: " + ex);
            return false;
        }
    }

5 Respostas

A

Carinha, não estou entendendo muito bem porque você está tendo dificuldade em fazer isto. Mas, vamo lá:

O seu coordTemp.getInformacaoList() aparentemente é o cara que contém os dados de informação vindos do banco. Então, basta ver se a informação que está nesta coordenada já existe: se existir, você não dá o add…

Se isto não é o que você está querendo, dá um reply nisso…

Marcos_Roberto_DJ

você pode mostrar um exemplo de código?

romarcio

Pelo que entendi da sua explicação, se uma informação já existir no banco, ela não deverá ser cadastrada. Para isso, você vai ter que consultar no banco para ver se tal informação já existe. Pode criar um IF - ELSE, se existir não salva, senão salva.

Marcos_Roberto_DJ

Isso,na verdade se já existir uma informação com mês e ano no banco ela deve ser ignorada

romarcio

Cria uma consulta com os critérios que devem ser testados, se a consulta retornar alguma coisa é sinal que existe, caso contrário não dai adiciona.
Não tem mistério, a não ser que eu não tenha entendido bem sua dúvida.

Criado 22 de janeiro de 2012
Ultima resposta 22 de jan. de 2012
Respostas 5
Participantes 3