Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sobre o persistence.xml

Olá pessoal. Eu andei vendo alguns projetos que utilizam especificação 2.2 da JPA e MySQL 8 (incluindo o dialeto dele) em projetos que utilizam Hibernate como o ORM. Se alguém souber responder, gostaria de saber por qual motivo o persistence xml nao necessita da tag 'provider', como eu mostro abaixo.

(Inclusive é o persistence.xml que eu uso, e funciona perfeitamente, porém queria saber o motivo da ausencia da tag provider)

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">

    <persistence-unit name="projeto_jpa">
        <!--<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>-->
        <class>br.com.alura.jpa.modelo.Categoria</class>
        <class>br.com.alura.jpa.modelo.Cliente</class>
        <class>br.com.alura.jpa.modelo.Conta</class>
        <class>br.com.alura.jpa.modelo.Movimentacao</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/projeto_jpa?useTimezone=true&amp;serverTimezone=UTC" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="minhaSenha" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />

            <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>
</persistence>
1 resposta
solução!

Olá Arthur, tudo bem com você?

A tag <provider> é uma tag opcional. Se você deixar seu persistence.xml sem ela, o JPA vai buscar por implementações (provedores de persistência) que estejam no Classpath e vai pegar a primeira que encontrar. Agora, caso você queira especificar uma implementação JPA específica para essa unidade de persistência, como por exemplo o Hibernate ao invés do EclipseLink, você deve especificar seu fully qualified name através dessa tag.

Resumindo, pode não haver problemas caso você saiba qual provedor será usado para implementar as especificações do JPA. Mas caso exista mais de um provedor no seu Classpath, pode ser uma boa ideia deixar explícito qual deles você quer utilizar afim de evitar comportamentos inesperados.

Espero que isso te ajude, qualquer dúvida é só avisar!

Forte abraço e bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software