Duvidas sobre HIBERNATE

3 respostas
B
  1. Ele deixa o projeto final mais lento?
  2. È uma boa pratica usar? ou é melhor fazer tudo no braco?
  3. Quanto tempo demora para dominar o Hibernate?

Obrigada!

3 Respostas

Felagund

biluquinha:
1) Ele deixa o projeto final mais lento?
2) È uma boa pratica usar? ou é melhor fazer tudo no braco?
3) Quanto tempo demora para dominar o Hibernate?

Obrigada!

  1. Sim ele é mais lento, mas essa lentidão compensa com a a agilidade na hora de desenvolver.
  2. Hoje em dia, não mais vantagem fazer no braço
  3. Não existe isso de dominar, quando vc axar que ta sabendo bastante, eles atualizam e pronto, vamos aprender tudo de novo. A palavra dominar em programação não existe

[]'s

G

A questão de ser lendo é dependente da situação, algumas vezes hibernate até promove ganhos de desempenho, um exemplo é a utilização de cache do hibernate, vc não precisa consultar sempre no banco algo que não mudou, hibernate controla isso pra vc.

Lavieri
biluquinha:
1) Ele deixa o projeto final mais lento?
Hmmm, depende mesmo, se tua conexão com o banco de dados, não for a melhor do mundo, ele deixa mais rapido ^^, como o colega acima falou, devido ao cache que ele pode fazer,
biluquinha:
2) È uma boa pratica usar? ou é melhor fazer tudo no braco?
Na minha opinião JPA (que é as anotações que vc faz) é o melhor caminho, o Hiberante é apenas uma consequencia do JPA, pois é a ferramente mais popular, alem de diminuir concideravelmente o tempo de desenvolvimento, onde vc não tera que reinventar a roda, recriando conexões, e formas de manipular o dado no banco de dados
biluquinha:
3) Quanto tempo demora para dominar o Hibernate?
O principal é fazer direito a parte do JPA, ou seja, as anotações, e se vc usa uma IDE poderosa como o netbeans, ele faz quase tudo pra vc, configura o banco com o hiberante, faz engenharia reversa (ou seja a partir de um banco de dados pronto, ele cria as classes com o JPA que representa o banco ...

ai depois disso é vc adcionar as restrições do banco e ser feliz...

..............

Posso te falar que o principal cuidado com o mapeamento automático que as IDEs fazem, é na parte de 1-N ou N-N .... o relacionamento é sempre um ponto que deixa duvida no pessoal e quase todos, liberam a lista da Entidade via método get/set o que pra mim é um erro sem precedentes, pois vc pode destruir a consistencia do seu projeto ^^ ...

Apenas pra exemplificar o que estou falando,

O NETBEANS e a maioria das pessoas MAPEA ASSIM

import static javax.persistence.CascadeType.ALL;
import static javax.persistence.FetchType.LAZY;

@Entity
@Table(name="pais",uniqueConstraints = @UniqueConstraint(columnNames="nome"))
public class Pais implements Serializable{

//.... outras propriedades

    @OneToMany(cascade=ALL, mappedBy = "pais", fetch = LAZY)
    private Set<Estado> estados = new LinkedHashSet<Estado>(0);

//.... outros métodos gets e sets

    public Set<Estado> getEstados() { //<<=== FAIL! fazendo assim, a pessoa vai adcionar o que quiser a sua lista de estados
        return estados;
    }

    public voi setEstado(Set<Estado> estados) { //<=== FAIL! ninguem fora da classe deve criar a lista sozinha e adcionar aqui...
        this.estados = estados;
    }
}

Eu prefiro uns 100% a mais a seguinte abordagem...

@Entity
@Table(name="pais",uniqueConstraints = @UniqueConstraint(columnNames="nome"))
public class Pais implements Serializable{

//.... outras propriedades

    @OneToMany(cascade={MERGE,PERSIST,REFRESH}, mappedBy = "pais", fetch = LAZY)
    private Set<Estado> estados = new LinkedHashSet<Estado>(0);

    public Set<Estado> getEstados() {
        return Collections.unmodifiableSet(estados); //retorna a lista, mas sem operações de ADD ou REMOVE.
    }

    private Set<Estado> getModifiableEstados() { //a lista modificavél só é acessada internamente...
        return estados;
    }

    //antes de adcionar um estado, eu testo sua consistencia
    public Pais add(Estado estado) throws NotFromThisPaisException,
            NotUniqueArgumentException, IllegalNullArgumentException {
        Consistencies.notNull(this, "estados", estado); //o estado enviado não pode ser null
        if (estado.getPais() == null) //se não houver nenhum pais setado, eu seto esse com o pais do estado
            estado.setPais(this);
        else if (!equals(estado.getPais())) //se o estado ja pertence a outro pais, eu lanço uma exceção.
            throw new NotFromThisPaisException(this, estado);

        Estado sameEntity = Consistencies.notDuplicated(this, "estados", estado,
                getEstados()); //eu verifico se o estado já tem na lista
        if (sameEntity != null)
            getModifiableEstados().remove(sameEntity);

        getModifiableEstados().add(estado); //se passar em todos os teste eu adciono.
        return this;
    }

    public Estado addEstado(String nomeDoEstado) throws
            IllegalNullArgumentException, MaximumSizeException,
            MinimumSizeException, NotUniqueArgumentException {

        Estado estado = new Estado(nomeDoEstado, this); //crio o estado
        add(estado); //adciono a este pais, este método faz os testes se é possivel adcionar
        return estado; //retorno o estado criado
    }

    public boolean remove(Estado estado) {
        return getModifiableEstados().remove(estado);
    }
    public boolean removeAll(Collection<Estado> estados) {
        return getModifiableEstados().removeAll(estados);
    }
    public Estado removeEstado(final String nomeDoEstado) {
        return CollectionUtils.removeFirst(
                getModifiableEstados(),
                Estado.criterionForNome(nomeDoEstado));
    }
    public void removeAllEstados() {
        getModifiableEstados().clear();
    }
}

sei que parece bem complicado, porem assim, eu mantenho a integridade dos meus paises 100% do tempo, e tenho certeza que qualquer estado adcionado ao pais, vai ser consistente, e não terei coisas como

Pais brasil = ...
brasil.getEstado().add(new Estado());
brasil.getEstado().add(new Estado());
brasil.getEstado().add(new Estado()); //adcionando 3 estados em branco

o que estragaria o objeto brasil

biluquinha:
Obrigada!
Por nada...

Criado 28 de abril de 2009
Ultima resposta 28 de abr. de 2009
Respostas 3
Participantes 4