Jump to content

Recommended Posts

Caros colegas, pesquisei bastante na net e aqui no fórum. Não encontrei uma resposta que pudesse satisfazer minha dúvida.

 

Seguinte, estou começando em JAVA e tenho diversas dúvidas, como muitos de nós mesmos.

 

O que seria Hibernate?(sei que tem materiais na internet, mas gostaria de respostas de pessoas que realmente utilizam dessa tecnologia). 

É utilizado ainda(hoje: 2017) ?

Por que utilizá-lo?

O mercado usa essa tecnologia?

 

Esta dúvida surgiu prq eu estava estudando um tutorial onde usa-se "servlets". Perguntei a uma amigo se ele utilizava e o mesmo disse que não. 

Então comecei a pesquisar sobre o assunto e vi que uns que utilizam e outros não. Os que utilizam, são pessoas que mexem no java na versão de 2014 pra baixo

e os que não utlizam, mexem no java de 2015 até hoje:2017.

 

Por isso surgiram essas dúvidas sobre o Hibernate. Também queria saber sobre o JPA. Vejo que existe um certo paralelo entre eles, ou seja, ou usa-se um  ou o outro ou os dois...em fim...

ficou meio confuso pra mim...

abço

Share this post


Link to post
Share on other sites

O hibernate é um framework ORM. você usa p/ mapear as classes java que são suas entidades de negócio p/ tabelas no banco relacional (Veja aqui um exemplo: https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-com-hibernate/)

 

Se ainda é usado? você pode dar uma olhada nas vagas no LinkedIn digitando Hibernate como palavra-chave.

Quanto aos servlets: existem aplicações legadas que utilizam JSP ao invés de JSF/ManagedBeans. Eventualmente você vai precisar saber alguma coisa sobre eles. Hoje é comum encontrar mais pessoas usando frameworks como ZK, Vaadin e Spring.

JPA é uma especificação. O Hibernate nasceu sem essa especificação e foi a partir dele que ela foi desenvolvida. O JPA descreve um padrão p/ frameworks de persistência.

Share this post


Link to post
Share on other sites
10 horas atrás, _Isis_ disse:

O hibernate é um framework ORM. você usa p/ mapear as classes java que são suas entidades de negócio p/ tabelas no banco relacional (Veja aqui um exemplo: https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-com-hibernate/)

 

Se ainda é usado? você pode dar uma olhada nas vagas no LinkedIn digitando Hibernate como palavra-chave.

Quanto aos servlets: existem aplicações legadas que utilizam JSP ao invés de JSF/ManagedBeans. Eventualmente você vai precisar saber alguma coisa sobre eles. Hoje é comum encontrar mais pessoas usando frameworks como ZK, Vaadin e Spring.

JPA é uma especificação. O Hibernate nasceu sem essa especificação e foi a partir dele que ela foi desenvolvida. O JPA descreve um padrão p/ frameworks de persistência.

 

Bem legal o teu resumo.

Grato! 

: )

Share this post


Link to post
Share on other sites
Em 06/08/2017 at 08:30, _Isis_ disse:

O hibernate é um framework ORM. você usa p/ mapear as classes java que são suas entidades de negócio p/ tabelas no banco relacional (Veja aqui um exemplo: https://www.caelum.com.br/apostila-java-web/uma-introducao-pratica-ao-jpa-com-hibernate/)

 

Se ainda é usado? você pode dar uma olhada nas vagas no LinkedIn digitando Hibernate como palavra-chave.

Quanto aos servlets: existem aplicações legadas que utilizam JSP ao invés de JSF/ManagedBeans. Eventualmente você vai precisar saber alguma coisa sobre eles. Hoje é comum encontrar mais pessoas usando frameworks como ZK, Vaadin e Spring.

JPA é uma especificação. O Hibernate nasceu sem essa especificação e foi a partir dele que ela foi desenvolvida. O JPA descreve um padrão p/ frameworks de persistência.

 

 

Vejo pessoas falando bem e mal. Daí fica complicado estabelecer uma ideia de algo que não conheço.

Por isto, abri o tópico. Queria entender, na prática de alguns ou muitos, a preferência e o ponto de vista de cada qual.

Share this post


Link to post
Share on other sites

O "falar bem e mal" depende do projeto. Já vi alguns blogs comentando situações específicas em que o Hibernate deixava de ser uma mão na roda e passava a incomodar.

Share this post


Link to post
Share on other sites

Todo framework tem vantagens e desvantagens, senão tivesse desvantagens todo mundo teria obrigatoriamente que usa-lo. Pra mim é o seguinte:

 

Por regra use o Hibernate, porque você não vai precisar escrever INSERT INTO, SELECT * FROM, UPDATE SET  toda vez, basta  mapear a entidade e dar um merge, find, só por isso, é mais produtivo. Agora se você precisa de alta performance por exemplo quando tem que processar alguns milhões de registros por dia, esqueça o Hibernate. Se você faz queries muito personalizadas que fazem aqueles relatorios malucos com SQLs de 50-500 Linhas aí também não sei se compensa usar o Hibernate por que voce vai ter que fazer um mapper que é bem mais zuado que o do JDBC.

 

Então a conclusão é que sempre depende cara, mas te dei alguns exemplos de quando compensa e quando não. Na minha opinião.

 

 

 

Share this post


Link to post
Share on other sites

Olá Carlos.

 

A plataforma Java possui uma tecnologia nativa para acessar bancos de dados relacionais, denominada JDBC (Java Database Connectivity).

 

As classes e métodos (Connection, Statement, PreparedStament, ResultSet...) manipulados pelo programador para codificar a comunicação com o banco de dados é comum, independentemente de qual banco de dados será acessado pela aplicação (Oracle, MySQL, Postgre...)

 

Cada banco de dados possui uma classe Java que implementa o "driver" e que permite que a JDBC se comunique com o respectivo banco. 

 

Todavia, essa tecnologia é de baixo nível. Ao utilizá-la, o programador precisa codificar muitas rotinas "repetitivas e óbvias", como comandos SQL para seleção, inclusão, alteração e remoção de registros.

 

Não bastasse o grande trabalho, ainda existe a necessidade de converter essas informações em um modelo de objetos, haja vista que as demais camadas das aplicações todas são codificadas em Java (orientado a objetos) e não em SQL. 

 

Em aplicações corporativas, que precisam tratar dezenas, centenas e até milhares de tabelas, codificar todos esses comandos e transformações para objetos, para cada tabela, é um esforço considerável, ao contrário do que se pode dizer a respeito de pequenos programas ou servlets.

 

Sendo assim, inicialmente a própria comunidade passou a criar frameworks (bibliotecas) para abstrair essas rotinas óbvias de comunicação e criação de objetos e processá-las em tempo de execução. Assim o programador passou a manipular apenas objetos e esses frameworks, em tempo de execução, passaram a tratar a parte de JDBC automaticamente.

 

O uso desses frameworks se tornou um padrão, tendo sido o Hibernate o framework mais bem sucedido.

 

Ocorreu então que, afim de padronizar esse tipo implementação, posteriormente a própria tecnologia Java incorporou uma especificação (JPA - Java Persistence API) que delimitou um modelo comum de classes e métodos para frameworks voltados para esse próposito.

 

Assim, os principais frameworks ORM adotaram esse padrão (JPA).

 

A vantagem disso é que o programador codifica com base em JPA, sem se preocupar (em tese) com qual framework está por trás (Hibernate, EclipseLink...) bastando indicar qual deles irá prover (Provider) a implementação. Por sua vez, eles dão conta de toda a parte JDBC para, restando ao programador focar na lógica de negócio usando os objetos, não o modelo relacional.

 

Se o projeto de software possuir requisitos de manutenibilidade e escalabilidade, deixar de usar JPA para escrever diretamente JDBC é uma escolha errada. Se for um "programinha" ou "servlet" com poucas operações, talvez usar JDBC "puro" seja razoável, ainda que JPA seja extremamente mais simples para o programador implementar.

 

Espero ter contribuído para seu entendimento,
Abs.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Christophersons
      Estou com um problema e não consigo resolver...
       
      @Entity @Table(name = "Quadro") @TableModel public class Quadro implements Serializable, Entidade<Quadro> { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @OneToOne private Quadro quadroPai; @OneToMany() private List<Quadro> listaQuadros = new ArrayList<Quadro>(); . . . Como faço o mapeamento correto da listaQuadros e também de quadroPai que é do mesmo tipo da classe?
      A ideia de funcionamento é que um quadro elétrico pode alimentar outro quadro elétrico ou mais.
    • By MarKteus
      Olá

      Estou enfrentando um problema bem chato com Java aqui em meu projetos, vejam:
      2019-02-01 08:57:06.469 ERROR 18120 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause com.microsoft.sqlserver.jdbc.SQLServerException: Nome de objeto 'db_mybank.dbo.edification' inválido.     at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:259) ~[mssql-jdbc-6.4.0.jre8.jar:na] Percebam que ali no nome do objeto está sendo inserido um underline ou underscore como queiram, porém esse traço não é para ser exibido a inserção do mesmo faz com que o objeto não seja encontrado, o pior é que na especificação da classe está correto vejam:
       
      import javax.persistence.Table; @Entity @Table(name = "tbedification", schema = "dbo", catalog = "dbmybank") public class edification implements Serializable { /** * Alguém consegue me ajuda com isso, acho que o hibernate está "zuando" alguma coisa

      Estou usando a ide Eclipse Neon e SpringBoot
    • By MarKteus
      Olá amigos
       
      Estou tentando gerando uma consulta usando @query que me traga o resultado de 3 tables SQL Server, porém o Hibernate alega que uma das propriedades não pode ser resolvida, contudo já verifiquei e a tal propriedade foi criada normalmente nas classes de entidades.
       
      O erro é nomedacoluna não pode ser resolvido, a coluna em questã é OccId

      Cabeçalho da classe
      @Entity
      @Table(name = "tabela", schema = "dbo", catalog = "dbtabela")
      public class OccurrenceChangeCancelLog implements Serializable {

      corpo e atributo que da o erro:
          private Integer OccId;

      construtor
          public OccurrenceChangeCancelLog(Integer occId) {
              this.OccId = occId;

          }

      Get e Set:
          @Column(name = "OcorrId")
          public Integer getIntOcorrId() {
              return this.OccId;
          }
          public void setIntOcorrId(Integer occId) {
              this.OccId = OcorrId;
          }

      @Query("select distinct oc.campos1,  mlt.campo2 "
                  + "from Occurre oc INNER JOIN "
                  + "OccurrenceChangeCancelLog mlt ON mlt.OccId = oc.OccurreId "
                  + "where mlt.dataLog >= :dtaLogOne AND mlt.dataLog <= :dtaLogTwo ")


      Alguém sabe o que pode ser?
    • By MarKteus
      Olá amigos
       
      Estou tentando gerando uma consulta usando @query que me traga o resultado de 3 tables SQL Server, porém o Hibernate alega que uma das propriedades não pode ser resolvida, contudo já verifiquei e a tal propriedade foi criada normalmente nas classes de entidades
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.