Hibernate ou JDBC

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:

http://guj.com.br/posts/list/210953.java#1072812

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