Problema com JPA e Hibernate

23 respostas
S

Pessoal estou seguindo os passos do livro recomendado aqui no GUJ, e fiz exatamente conforme o exemplo mas nao esta persistindo no banco veja o meu console

run:
 WARN [main] (UserSuppliedConnectionProvider.java:23) - No connection properties specified - the user must supply JDBC connections
ERROR [main] (SchemaUpdate.java:165) - could not complete schema update
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
Exception in thread "main" java.lang.UnsupportedOperationException: The user must supply a JDBC connection
	at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
	at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
	at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:14)
	at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
	at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
	at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
	at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:26)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

Mas n manda a informação para o DB …

package br.com.loja.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Automovel {
    @Id @GeneratedValue
    private Integer id;
    private String marca;
    private String modelo;
    private String observacoes;
    private Integer anoFabricacao;
    private Integer anoModelo;
    
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public void setObservacoes(String observacoes) {
        this.observacoes = observacoes;
    }

    public Integer getAnoFabricacao() {
        return anoFabricacao;
    }

    public void setAnoFabricacao(Integer anoFabricacao) {
        this.anoFabricacao = anoFabricacao;
    }

    public Integer getAnoModelo() {
        return anoModelo;
    }

    public void setAnoModelo(Integer anoModelo) {
        this.anoModelo = anoModelo;
    }
}
<?xml version="1.0" encoding="UTF-8"?>  
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">  
    <persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">  
        <provider>org.hibernate.ejb.HibernatePersistence</provider>  
        <properties>  
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />  
            <property name="hibernate.connection.show_sql" value="true" />  
            <property name="hibernate.hbm2ddl.auto" value="update" />  
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />  
            
            <property name="hibernate.connection.username" value="root" />  
            <property name="hibernate.connection.password" value="senha" />  
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/automoveis" />  
            
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="use_sql_comments" value="true"/>
        </properties>  
    </persistence-unit>  
</persistence>
public class PersistidorDeAutomovel {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence");
        EntityManager em = emf.createEntityManager();
        
        Automovel auto = new Automovel();

        auto.setMarca("");
        auto.setAnoModelo(2011);
        auto.setAnoFabricacao(2012);
        auto.setModelo("Ferrari");
        auto.setObservacoes("Nunca foi batido");
        
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        em.persist(auto);
        tx.commit();
        em.close();
        emf.close();
    }
}

23 Respostas

H

Em qual pasta você colocou o arquivo persistence.xml? O dialeto está correto?

H

Você colocou o arquivo persistence.xml na pasta src/META-INF ?

A

acho que você não criou o schema automoveis no banco de dados, verifique isso!!

CREATE SCHEMA IF NOT EXISTS `automoveis`;
S
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />

Sim esta no META-INF do meu netbeans e outra criei o projeto ja com hibernate entao ele crio automatico o persistence.

S

[quote=alandiniz]acho que você não criou o schema automoveis no banco de dados, verifique isso!!

CREATE SCHEMA IF NOT EXISTS `automoveis`;

WHAT is THIS? depois de criado veja:

mysql> show schemas;
±-------------------+
| Database |
±-------------------+
| information_schema |
| automoveis |
| mysql |
±-------------------+

A

Se o seu projeto não é maven, a pasta no netbeans não é essa, segue post com o mesmo problema.

http://www.guj.com.br/java/283142-hibernate–jpa-erro-resolvido

S

O Persistence esta no lugar certo ;[ o netbeans auto crio ele quando selecionei projeto com hibernate

H

samuelM:
O Persistence esta no lugar certo ;[ o netbeans auto crio ele quando selecionei projeto com hibernate
Seu banco está ativo? O serviço dele?

B

entao cara ele criar automaticamente msm mais nao é no lugar certo, coloca em modo de pasta a visualização e poe no caminho ja citado pelo pessoal que ja vai matar esse erro!!

S

Veja cliquei com o botao direito no arquivo persistence.xml para ver o caminho no qual apontava veja esta correto.

/home/samuel/NetBeansProjects/JSFeJPA/src/java/META-INF/persistence.xml

S

tambem coloquei na parte de web e nao deu certo veja;

/home/samuel/NetBeansProjects/JSFeJPA/web/META-INF/persistence.xml

e aqui

/home/samuel/NetBeansProjects/JSFeJPA/src/META-INF/persistence.xml

enfim continuo tomando este erro numa coisa simples :frowning:

Exception in thread "main" java.lang.UnsupportedOperationException: The user must supply a JDBC connection
	at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
	at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27)
	at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
	at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1294)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:14)
	at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:30)
	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
	at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
	at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
	at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
	at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
	at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
	at PersistidorDeAutomovel.main(PersistidorDeAutomovel.java:26)
Java Result: 1
A

Tem que ser

/home/samuel/NetBeansProjects/JSFeJPA/src/conf/persistence.xml

S

Coloquei la e o mesmo problema persiste, enfim nao e problema de localizacao do persistence :frowning:

H

samuelM:
Coloquei la e o mesmo problema persiste, enfim nao e problema de localizacao do persistence :(
Tenta criar o mesmo projeto no Eclipse. ^^

Lá eu sei que se você colocar o arquivo persistence.xml dentro da pasta src/META-INF funciona. ^^

W

Eu costumo utilizar Hibernate diretamente, mas de acordo com este post:

Parece que você está trocando o nome das propriedades. Ao invés de javax.persistence.jdbc.driver está hibernate.connection.url (e nas demais tb).

S

wagnerfrancisco:
Eu costumo utilizar Hibernate diretamente, mas de acordo com este post:

Parece que você está trocando o nome das propriedades. Ao invés de javax.persistence.jdbc.driver está hibernate.connection.url (e nas demais tb).

Assim como postado acredito que esta correto veja:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source/>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.connection.show_sql" value="true"/>
      <property name="hibernate.hbm2ddl.auto" value="update"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.user" value="root"/>
      <property name="javax.persistence.password" value="senha"/>
      <property name="javax.persistence.url" value="jdbc:mysql://localhost:3306/automoveis"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="use_sql_comments" value="true"/>
    </properties>
  </persistence-unit>
</persistence>
S

Não é problema no codigo to achando q é problema em libs,

Quais libs preciso para fazer essa simples transação com o banco?

A

Cara fiz um projeto aqui com as suas classes, e funcionou direitinho as diferenças são:
estou usando outro banco Derby
utilizo o maven para gerenciar minhas dependências.

e o persistence.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt;
    &lt;persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL"&gt;
        &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt;
        &lt;properties&gt;
            &lt;property name="hibernate.connection.username" value="app"/&gt;
            &lt;property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.ClientDriver"/&gt;
            &lt;property name="hibernate.connection.password" value="app"/&gt;
            &lt;property name="hibernate.connection.url" value="jdbc:derby://localhost:1527/sample"/&gt;
            &lt;property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/&gt;
            &lt;property name="hibernate.show_sql" value="true"/&gt;  
            &lt;property name="hibernate.format_sql" value="true"/&gt;  
            &lt;property name="use_sql_comments" value="true"/&gt; 
        &lt;/properties&gt;
    &lt;/persistence-unit&gt;
&lt;/persistence&gt;

Caso queira segue também o Pom.xml que tem as lib’s

&lt;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"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

    &lt;groupId&gt;br.com&lt;/groupId&gt;
    &lt;artifactId&gt;loja&lt;/artifactId&gt;
    &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
    &lt;packaging&gt;jar&lt;/packaging&gt;

    &lt;name&gt;loja&lt;/name&gt;
    &lt;url&gt;http://maven.apache.org&lt;/url&gt;

    &lt;properties&gt;
        &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    &lt;/properties&gt;

    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;junit&lt;/groupId&gt;
            &lt;artifactId&gt;junit&lt;/artifactId&gt;
            &lt;version&gt;3.8.1&lt;/version&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
            &lt;artifactId&gt;hibernate&lt;/artifactId&gt;
            &lt;version&gt;3.2.5.ga&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
            &lt;artifactId&gt;ejb3-persistence&lt;/artifactId&gt;
            &lt;version&gt;1.0.1.GA&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
            &lt;artifactId&gt;hibernate-entitymanager&lt;/artifactId&gt;
            &lt;version&gt;3.3.2.GA&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax.sql&lt;/groupId&gt;
            &lt;artifactId&gt;jdbc-stdext&lt;/artifactId&gt;
            &lt;version&gt;2.0&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax.transaction&lt;/groupId&gt;
            &lt;artifactId&gt;jta&lt;/artifactId&gt;
            &lt;version&gt;1.0.1B&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax&lt;/groupId&gt;
            &lt;artifactId&gt;javaee-web-api&lt;/artifactId&gt;
            &lt;version&gt;6.0&lt;/version&gt;
            &lt;type&gt;jar&lt;/type&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.derby&lt;/groupId&gt;
            &lt;artifactId&gt;derbyclient&lt;/artifactId&gt;
            &lt;version&gt;10.1.1.0&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;repositories&gt;
        &lt;repository&gt;
            &lt;id&gt;Java.Net&lt;/id&gt;
            &lt;name&gt;Java.Net&lt;/name&gt;
            &lt;url&gt;http://download.java.net/maven/2/&lt;/url&gt;
          
        &lt;/repository&gt;
    &lt;/repositories&gt;
&lt;/project&gt;
H

samuelM:
Não é problema no codigo to achando q é problema em libs,

Quais libs preciso para fazer essa simples transação com o banco?

Se fosse problema de libs você teria o erro de class not found exception.

S

Cara interessante este MAVEN ele serve para vc gerenciar as libs que vc importa para o projeto?

H

samuelM:
Cara interessante este MAVEN ele serve para vc gerenciar as libs que vc importa para o projeto?
Sim.
Basta escreve o nome que ele importa tudo “magicamente”.

A

Tem uma outra possibilidade, pelo fato do tópico estar no fórum “Desenvolvimento Web” creio que sua aplicação seja web.

E ha algumas das bibliotecas que são necessárias para o JPA, que já tem no aplication server, sendo desnecessária a inclusão das mesmas no projeto, porem você está rodando o teste em uma classe Standard, via main, ai sim pode ter alguma recurso que não está implementado, o projeto que eu postei é Standard.

A

samuelM,

Aproveitando o comentário do AmauriSpPoa, qual servidor web você está usando, Tomcat? Se for o caso, o Tomcat precisa também do context.xml, não funciona só com o persistence.xml. Você tem que criar esse arquivo e colocar também na pasta META-INF.

Criado 7 de outubro de 2012
Ultima resposta 11 de out. de 2012
Respostas 23
Participantes 8