2016-07-01 100 views
1

我是使用JPA和Hibernate的新手,所以我對typequery有一些問題。我有一個函數接收一個字符串和一個「Departamento」的名字,並且檢索具有與之相關的「Departamento」的對象(「Carrera」)。在sqldeveloper中,我沒有問題,但是在typedquery中,它變得有點麻煩。我確信我的查詢語法是錯誤的,但我不知道如何解決。如果有人能幫助我,我將不勝感激。java.lang.ClassNotFoundException:org.hibernate.collection.internal.PersistentBag - 無法找到我正在尋找的類

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(); 
    } 
} 

錯誤:

Exception in thread "main" javax.ejb.EJBException: java.lang.ClassNotFoundException: org.hibernate.collection.internal.PersistentBag at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:236) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181) at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144) at com.sun.proxy.$Proxy4.obtenerPorDepartamento(Unknown Source) at com.cliente.ClientePrueba.main(ClientePrueba.java:130) Caused by: java.lang.ClassNotFoundException: org.hibernate.collection.internal.PersistentBag at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:131) at org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:112) at org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:949) at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1256) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224) at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1746) at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1659) at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1286) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224) at org.jboss.marshalling.river.RiverUnmarshaller.doReadCollectionObject(RiverUnmarshaller.java:180) at org.jboss.marshalling.river.RiverUnmarshaller.readCollectionData(RiverUnmarshaller.java:777) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:653) at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209) at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41) at org.jboss.ejb.client.remoting.MethodInvocationResponseHandler$MethodInvocationResultProducer.getResult(MethodInvocationResponseHandler.java:103) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:276) at org.jboss.ejb.client.EJBObjectInterceptor.handleInvocationResult(EJBObjectInterceptor.java:64) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290) at org.jboss.ejb.client.EJBHomeInterceptor.handleInvocationResult(EJBHomeInterceptor.java:88) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290) at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:46) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290) at org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:129) at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:265) at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:453) at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:202) ... 4 more

+0

您是否添加了所有的hibernate庫? –

+0

我以爲野蠅擁有所有的圖書館? – user2912069

回答

0

它看起來像ÿ你在客戶端類路徑中沒有hibernate jars。 我的意思是這種依賴性:

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

檢查您的客戶端類路徑,並添加此休眠罐子。

+0

好的,非常感謝你。我會嘗試。 – user2912069