java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag - 无法找到我要查找的类

时间:2016-07-01 20:51:41

标签: java hibernate jpa

我是使用JPA和Hibernate的新手,所以我对typequery有一些问题。我有一个函数接收一个字符串和一个" Departamento"的名称,并检索具有该#34; Departamento"的对象(" Carrera")。与之相关联。在sqldeveloper中我没有问题,但在typedquery中它变得有点麻烦。我确信我的查询语法错误,但我不知道如何修复。如果有人能帮助我,我将不胜感激。

ClientePrueba.java:

public class ClientePrueba {
    public static void main(String[] args) throws NamingException {
        DepartamentosBeanRemote departamentosBean = (DepartamentosBeanRemote) InitialContext.doLookup("EjemploEJB/DepartamentosBean!com.servicios.DepartamentosBeanRemote");
        MateriasBeanRemote materiasBean = (MateriasBeanRemote) InitialContext.doLookup("EjemploEJB/MateriasBean!com.servicios.MateriasBeanRemote");
        CarrerasBeanRemote carrerasBean = (CarrerasBeanRemote) InitialContext.doLookup("EjemploEJB/CarrerasBean!com.servicios.CarrerasBeanRemote");

        System.out.println("Obtengo todas las carreras del departamento MATEMATICAS");
        List<Carrera> carreras = carrerasBean.obtenerPorDepartamento("MATEMATICAS");
        for (Carrera car : carreras) {
            System.out.println(car.getNombre());
        }       
    }
}

CarrerasBean.java

/**
 * Session Bean implementation class CarrerasBean
 */
@Stateless
public class CarrerasBean implements CarrerasBeanRemote {
    @PersistenceContext
    private EntityManager em;

    /**
     * Default constructor. 
     */
    public CarrerasBean() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public List<Carrera> obtenerPorDepartamento(String departamento) {
        TypedQuery<Carrera> query = em.createQuery("SELECT c FROM Carrera c WHERE c.departamento.nombre = :depto", Carrera.class)
                .setParameter("depto", departamento);
        return query.getResultList();
    }
}

错误:

  

线程中的异常&#34; main&#34; javax.ejb.EJBException异常:   抛出java.lang.ClassNotFoundException:   org.hibernate.collection.internal.PersistentBag at   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:236)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181)     在   org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144)     在com.sun.proxy。$ Proxy4.obtenerPorDepartamento(未知来源)at   com.cliente.ClientePrueba.main(ClientePrueba.java:130)引起:   抛出java.lang.ClassNotFoundException:   org.hibernate.collection.internal.PersistentBag at   java.net.URLClassLoader $ 1.run(未知来源)at   java.net.URLClassLoader $ 1.run(未知来源)at   java.security.AccessController.doPrivileged(Native Method)at   java.net.URLClassLoader.findClass(未知来源)at   java.lang.ClassLoader.loadClass(未知来源)at   sun.misc.Launcher $ AppClassLoader.loadClass(未知来源)at   java.lang.ClassLoader.loadClass(未知来源)at   java.lang.Class.forName0(Native Method)at   java.lang.Class.forName(未知来源)at   org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:131)     在   org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:112)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:949)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1256)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)     在   org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746)     在   org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadCollectionObject(RiverUnmarshaller.java:180)     在   org.jboss.marshalling.river.RiverUnmarshaller.readCollectionData(RiverUnmarshaller.java:777)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:653)     在   org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)     在   org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)     在   org.jboss.ejb.client.remoting.MethodInvocationResponseHandler $ MethodInvocationResultProducer.getResult(MethodInvocationResponseHandler.java:103)     在   org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:276)     在   org.jboss.ejb.client.EJBObjectInterceptor.handleInvocationResult(EJBObjectInterceptor.java:64)     在   org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)     在   org.jboss.ejb.client.EJBHomeInterceptor.handleInvocationResult(EJBHomeInterceptor.java:88)     在   org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)     在   org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:46)     在   org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)     在   org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:129)     在   org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:265)     在   org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:453)     在   org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:202)     ......还有4个

1 个答案:

答案 0 :(得分:1)

看起来你在客户端类路径中没有hibernate jar。 我的意思是这种依赖:

<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>

检查您的客户端类路径并添加此hibernate jar。