12
respostas

Exemplo Hibernate 5.2+ jpa

Alguem tem um exemplo de um crud basico em jsf com hibernate 5.2+ e jpa? Que parece que mudou bastante coisa do hibernate 5.2 para cima e estou apanhando aqui rs com o maven, grato

12 respostas

Oi Guilherme, a api básica do Hibernate ainda está mantida. Inclusive eles já publicaram no maven as versões mais novas e vc pode referência-las no seu projeto. Se quiser, tenta dizer qual problema vc está tendo...

Oi alberto, pelo que vi nao tem mais o Entity Manager da 5.2 para baixo, pelo menos o codigo que tenho funciona ate esta versao, nela ja da erro :/ dai queria saber se algm ja usou o modelo novo, vi tb que agr tudo esta no core do hibernate

Eh só adicionar a dependência da Jpa 2.1. O entitymanager eh da spec, o hibernate apenas implementa. Vc precisa das interfaces da spec, pra poder referenciar.

Quando importei o core do hibernate que peguei no repositorio do maven, fui no pom e fui ver a arvore de dependencia, dai la ele ja importa a jpa :/ alem de diversas outras que normalmente eu usava quando era sem maven, vc tem um exemplo de um pom.xml e classe de persistencia funcionando alberto? olhei no github mas n achei uma dele atual

Alberto uma duvida, o arquivo persistence.xml, quando vc cria com maven vc coloca ele onde?

Alberto estava vendo aqui e muita gnt tem problema em usar a versao 5.2 do hibernate, achei um post do nico dizendo que ela esta bugda, o meu sempre da o erro:

No Persistence provider for EntityManager named

Ja coloquei todas as bibliotecas e configurei o persistence.xml :/

Aqui meu exemplo:

persistence.xml fica onde sempre ficou.. src/META-INF.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    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_1.xsd">
    <persistence-unit name="testehibernate5">        

        <class>br.com.asouza.testehibernate5.Autor</class>
        <class>br.com.asouza.testehibernate5.Livro</class>

        <properties>
            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/cdc_react?serverTimezone=America/Sao_Paulo" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />

            <!-- Configuracoes especificas do Hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />

            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="false" />

            <!-- poderia ser: update, create, create-drop, none -->
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.asouza</groupId>
    <artifactId>testehibernate5</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.2.Final</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.3</version>
        </dependency>

    </dependencies>
</project>

Exemplo de código:

package br.com.asouza.testehibernate5;

import java.util.stream.Stream;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.spi.PersistenceProviderResolverHolder;

import org.hibernate.Session;

public class Main {

    public static void main(String[] args) {
        System.out.println(PersistenceProviderResolverHolder
                .getPersistenceProviderResolver()
                .getPersistenceProviders());


        EntityManagerFactory factory = Persistence.createEntityManagerFactory("testehibernate5");
        EntityManager manager = factory.createEntityManager();

        Session session = manager.unwrap(Session.class);
        Stream<Autor> stream = session.createQuery("select a from Autor a").stream();


        manager.close();
        factory.close();
    }
}

Alberto testei aqui, com Mysql funcionou :D valeu mesmo, o unico problema que ainda ficou foi que ele nao era para funcionar independente do banco? alterei o persistance.xml para funcionar no postgresql:


    <persistence-unit name="testehibernate5post">

        <class>br.com.asouza.testehibernate5.Autor</class>
        <class>br.com.asouza.testehibernate5.Livro</class>

        <properties>
            <!-- Propriedades JDBC -->
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:postgresql://localhost/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <property name="javax.persistence.jdbc.password" value="postgres" />

            <!-- Configuracoes especificas do Hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />

            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="false" />

            <!-- poderia ser: update, create, create-drop, none -->
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>

Dai volta o erro que eu estava tendo:

No Persistence provider for EntityManager named testehibernate5post

No pom.xml eu usei:

<dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4.1211</version>
        </dependency>

Tem alguma ideia do pq apenas com postgresql esta dando erro? Na main mandei chamar o testehibernate5post

Opa, deveria funcionar sim... Tem que ver o erro.. pode ser problema de conexão, permissão...

Pois eh, nao sei porque do postgresql n funcionar, sem utilizar maven com os jars funciona, entao nao deve ser permissao ou senha :/ o erro que da eh este:

[org.hibernate.jpa.HibernatePersistenceProvider@5b2133b1]
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named testehibernate5post
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at br.com.asouza.testehibernate5.Main.main(Main.java:20)

Mas vlw o do mysql ja ajudou, eu nao estava tentando com ele, mas ja vi que da pra fazer com versao nova xD entao vou tentar ver oq esta dando no postgresql

eu tenho o mesmo problema, e utilizo o postgresql, Tanto com o maven, quanto sem utilizar o maven mas utilizando o hibernate 5, tenho a mensagem 'No Persistence provider for EntityManager named',

para dizer a verdade, a mensagem completa é :

'jan 29, 2018 10:18:56 AM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. jan 29, 2018 10:18:56 AM org.hibernate.ejb.HibernatePersistence logDeprecation WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead. Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persistence provider for EntityManager named Persistir' não sei se pode ser a biblioteca de persistencia, mas se alguem puder ajudar !!

já encontrei a solução :

no persistence.xml trocar a linha :org.hibernate.ejb.HibernatePersistence

pela linha abaixo :

org.hibernate.jpa.HibernatePersistenceProvider