- Ele deixa o projeto final mais lento?
- È uma boa pratica usar? ou é melhor fazer tudo no braco?
- Quanto tempo demora para dominar o Hibernate?
Obrigada!
Obrigada!
[quote=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![/quote]
[]'s
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.
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,
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
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
[code]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;
}
}[/code]
Eu prefiro uns 100% a mais a seguinte abordagem…
[code]@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();
}
}[/code]
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
[quote=biluquinha]Obrigada![/quote] Por nada…