Galera, estou desenvolvendo um sistema que vai se comunicar com alguns hardwares via socket e precisa persistir essas informações no banco de dados. Preciso de performance e tenho pouco tempo para implementar. Vou perder muito desempenho usando o Hibernate ? O custo da implementação JDBC compensa no ganho de desempenho ?
Entre usar ou não Hibernate, eu digo, use-o.
Eu não crio nenhuma aplicação hj em dia sem ser com hibernate, mesmo que tenha 3 tabelas, meto o hibernate.
Vantagens é que a manutenção se torna bem mais simples e não precisa ficar fazer métodos de inset e update para cada classe que vc tem, sabe aqueles insert into… update set.
Eu acho que vale a pena sim usar o hibernate.
Aqui mesmo no guj tem uns tutoriais sobre o hibernate, da uma olhada lá em Artigos, caso nunca tenha trabalhado com hibernate.
Eu iria alem e diria que vc corre risco de performance se nao usar Hibernate. Pra nao ficar repetindo a mesma coisa, olhe esta mensagem que eu coloquei a um tempo atras:
Eu ja brinquei com o Hibernate e realmente ele é bem produtivo, mas na época que usei eu “penei” em algumas configurações para otimizá-lo ao máximo. Minha aplicação tem que ser praticamente em realtime por isso tenho medo. Aproveitando o tópico gostaria de saber se é tranquilo trabalhar com o hibernate usando heranças. Tenho uma classe X que tem alguns atributos que são padrão para todas as entidades, e tenho minhas especializações… Como fica o mapeamento dos objteos via annotations ??
Olá Guitar_Men,
Embora eu não tenha um conhecimento legal sobre Hibernate(estou começando a mudar de JDBC para Hibernate agr), achei algumas matérias legais que possa te ajudar com essa parte do mapeamento.
[url]http://thiagoprocaci.blogspot.com/2009/04/mapeamento-objeto-relacional-com.html
busao.googlecode.com/files/hibernate_annotation.pdf[/url] (É uma apostila mto bom, se não conseguir baixar me avisa).
Bom, acho que com essas duas dá pra entender legal…
Beijos.
Dani!
Tem como trabalhar com herança sim. Existem diversas formas.
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168
A documentação do hibernate é MUITO completa.
Dê uma lida na descrição das estratégias de mapeamento: Table per Class Strategy, Single Table per Class Hierarchy Strategy e Joined Subclass Strategy para ver qual é a melhor para você.
Quanto a sua dúvida de usar ou não hibernate, vc precisa pesar o quanto vc sabe de hibernate e se isso pode ou não te atrapalhar a desenvolver um sistema que deve ser entregue para ontem e claro, qual é a importância desse sistema.
[]´s
A questão do mapeamento acho que ja encontrei a solução vou usar @MappedSuperclass. Valew pessoal
Vou postar algumas classes de um projeto meu onde usei herença nas entidades.
Um ObjetoAprendizagem é usado como base para diversas outras classes.
[code]/**
-
Classe que representa um objeto de aprendizagem.
-
Serve como base para as outras classes.
-
@author David Buzatto
*/
@MappedSuperclass
public abstract class ObjetoAprendizagem implements Serializable {@Id
@GeneratedValue
private long id;@Length( max = 100 )
@NotNull
@NotEmpty
private String titulo;@Temporal( TemporalType.TIMESTAMP )
@NotNull
private Date dataCriacao;@Temporal( TemporalType.TIMESTAMP )
@NotNull
private Date dataAtualizacao;private boolean compartilhado;
// gets e sets…
}
/**
-
Página de um material.
-
@author David Buzatto
*/
@Entity
@Transactional
public class Pagina extends ObjetoAprendizagem {@Column( columnDefinition=“longtext” )
@NotNull
private String conteudoHtml;@ManyToMany
private List< Imagem > imagens;@ManyToMany
private List< Video > videos;@ManyToMany
private List< Som > sons;// estou omitindo os outros campos…
// gets e sets…
}
/**
-
Asset de um material.
-
@author David Buzatto
*/
@MappedSuperclass
public abstract class Asset extends ObjetoAprendizagem {@Length( max = 150 )
@NotNull
@NotEmpty
private String nomeArquivo;// indica se um arquivo é externo ou não
boolean externo;// mais campos aqui…
// gets e sets…
}
/**
-
Asset do tipo imagem.
-
@author David Buzatto
*/
@Entity
@Transactional
public class Imagem extends Asset {@ManyToMany( mappedBy = “imagens” )
private List< Pagina > paginasQueContem;@ManyToOne
@NotNull
private Usuario usuario;@OneToOne
@NotNull
private Metadata metadata;// mais campos aqui…
// gets e sets…
}[/code]
Note que Pagina, herda de ObjetoAprendizagem e ja é uma classe concreta.
Entretanto, Asset é uma classe abstrata, que herda de ObjetoAprendizagem (tbm abstrata).
No caso da classe Imagem, é uma classe concreta que herda de Asset.
Na estratégia que utilizei, somente serão criadas no banco as tabelas das classes concretas.
Note que as classes abstratas não são entidades, mas sim MappedSuperclass.
[]´s