JPA - The user must supply a JDBC connection

11 respostas
T

olá pessoal estou vendo as video aulas Desenvolvendo uma aplicação completa JPA, estou com o seguinte problema. segue o erro abaixo.

alguem pode me ajudar?

estcase: testAddUser(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.dao.UserDAO.addUser(UserDAO.java:24)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testAddUser(UserDAOTest.java:53)


Testcase: testUpdateUser(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.dao.UserDAO.updateUser(UserDAO.java:33)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testUpdateUser(UserDAOTest.java:68)


Testcase: testGetUser(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntity(JPAUtil.java:58)
at br.com.mycompletejpawebapp.dao.UserDAO.getUser(UserDAO.java:41)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testGetUser(UserDAOTest.java:81)


Testcase: testRemoveUser(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.dao.UserDAO.removeUser(UserDAO.java:45)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testRemoveUser(UserDAOTest.java:96)


Testcase: testRemoveById(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.dao.UserDAO.addUser(UserDAO.java:24)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testRemoveById(UserDAOTest.java:114)


Testcase: testGetAllUsers(br.com.mycompletejpawebapp.dao.UserDAOTest): Caused an ERROR
The user must supply a JDBC connection
java.lang.UnsupportedOperationException: The user must supply a JDBC connection
at org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)
at br.com.mycompletejpawebapp.util.JPAUtil.getList(JPAUtil.java:43)
at br.com.mycompletejpawebapp.dao.UserDAO.getAllUsers(UserDAO.java:59)
at br.com.mycompletejpawebapp.dao.UserDAOTest.testGetAllUsers(UserDAOTest.java:129)


Test br.com.mycompletejpawebapp.dao.UserDAOTest FAILED
C:\devmedia\jpacompleteexample2\nbproject\build-impl.xml:955: Some tests failed; see details above.
FALHA NA CONSTRUÇÃO (tempo total: 3 segundos)

11 Respostas

H

O JPA está reclamando que não existe conexão aberta.

Você está abrindo a transação?

T

estou abrindo a conexão no método getEntityManager, está correto?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.mycompletejpawebapp.util;

import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 *
 * @author Administrador
 */
public class JPAUtil {

    private static JPAUtil me;
    private EntityManagerFactory emf;

    private JPAUtil() {
        emf = Persistence.createEntityManagerFactory("exemplo");
    }

    public static JPAUtil getInstance(){
        if(me == null){
            me = new JPAUtil();
        }
       return me;
    }
public EntityManager getEntityManager(){
    EntityManager toReturn = emf.createEntityManager();
    toReturn.getTransaction().begin();
    return toReturn;
}
@SuppressWarnings("unchecked")
public <T> List <T> getList(Class<T> classToCast, String jpql, Object... parameters){
    List<T> toReturn = null;
    EntityManager em = getEntityManager();

    Query qr = em.createQuery(jpql);

    for (int i = 0; i < parameters.length; i++) {
        qr.setParameter(i+1, parameters[i]);
    }
    toReturn = qr.getResultList();
    em.getTransaction().commit();
    em.close();

    return toReturn;
    }

public <T> T getEntity(Class<T> entityClass, Serializable pk){
    EntityManager em = getEntityManager();
    T toReturn = em.find(entityClass, pk);
    em.getTransaction().commit();
    em.close();
    return toReturn;
}

}
H

Repare que o erro acontece na linha: at br.com.mycompletejpawebapp.util.JPAUtil.getEntityManager(JPAUtil.java:37)

Você configurou o datasource correto?

Dá algum erro quando você inicia a aplicação?

T

acho q não. onde eu configuro o datasource ?

H

tiagostrokes:
acho q não.
Então você precisa ter certeza.

Onde você configurou o caminho do banco e senha?
Nenhum erro acontece antes desse?

T

configurei em um persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
    version="1.0">
    <persistence-unit name="exemplo"
        transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="UPDATE" />
            <property name="hibernate.show_sql" value="true" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/jpacompleteexample" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
        </properties>
    </persistence-unit>
</persistence>
T

alguem pode ajudar?

H

Posta o método addUser aí.

T

segue o metodo, vlw obrigado pela por ajudar

public Integer addUser(User usr){
        EntityManager em = JPAUtil.getInstance().getEntityManager();
        em.persist(usr);
        em.getTransaction().commit();
        em.close();
        return usr.getId();

    }
H

É cara, ñ consigo imagina oq possa estar acontecendo. Sorry. Talvez outra pessoa possa te ajudar.

Boa sorte

S

Post velho, mas como topei com isso, fica aí a resposta: se usar jdbc direto com entitymanager, use as propriedades “hibernate.connection” em vez de “javax.persistence”, algumas configs (ao menos nos hibernate 3.X) não se habilitam completamente ao usar a JPA padrão. Possivelmente precise configurar outras mais para usar javax.persistence nesse caso

Criado 1 de julho de 2012
Ultima resposta 17 de fev. de 2014
Respostas 11
Participantes 3