Почему я получаю исключение NullPointerException в этом коде? - PullRequest
1 голос
/ 15 февраля 2010
public void addEmp(String emp_name, String emp_sal, String did) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("transactions-optional");     
    EntityManager em = emf.createEntityManager();
    try {

        String s = did;

        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        System.out.println("value of Department_name is::" + s);



        Query q = em.createQuery("select from com.wissen.enterprisebysush.server.domainobject.Department d");
        Department dept = (Department) q.getResultList().get(0);
        System.out.println("Name of Department is::" + dept.getDept_name());


        Employee e = new Employee();
        e.setEmp_name("Abvc");
        e.setEmp_sal("5000");
        e.setDepartment(dept);
        em.persist(e);

        System.out.println("Transaction: " + transaction);

        transaction.commit();
        em.close();

    } catch (NullPointerException e) {
        e.printStackTrace();
        System.out.println("Exception::" + e.getCause());
    } finally {
    }
}

Я получаю NullPointerException на transaction.commit();. Поэтому я не могу добавить Department объект в Employee

Транзакция: org.datanucleus.jpa.EntityTransactionImpl@1e4320e java.lang.NullPointerExceptionException :: нуль

at com.google.appengine.api.datastore.KeyFactory.stringToKey(KeyFactory.java:181)
at org.datanucleus.store.appengine.DatastoreElementContainerStoreSpecialization.extractElementKey(DatastoreElementContainerStoreSpecialization.java:170)
at org.datanucleus.store.appengine.DatastoreAbstractCollectionStoreSpecialization.contains(DatastoreAbstractCollectionStoreSpecialization.java:57)
at org.datanucleus.store.mapped.scostore.AbstractCollectionStore.contains(AbstractCollectionStore.java:116)
at org.datanucleus.sco.backed.List.contains(List.java:455)
at org.datanucleus.state.RelationshipManager.processManyToOneBidirectionalRelation(RelationshipManager.java:690)
at org.datanucleus.state.RelationshipManager.process(RelationshipManager.java:294)
at org.datanucleus.state.JDOStateManagerImpl.processManagedRelations(JDOStateManagerImpl.java:2377)
at org.datanucleus.ObjectManagerImpl.performManagedRelationships(ObjectManagerImpl.java:2706)
at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:2744)
at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:2886)
at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:348)
at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:235)
at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:104)
at com.wissen.enterprisebysush.server.GreetingServiceImpl.addEmp(GreetingServiceImpl.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:713)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle(Server.java:313)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)

Перед совершением транзакции я распечатал ее, все еще получая ошибку.

Ответы [ 2 ]

1 голос
/ 16 февраля 2010

Проблема в «плагине DataNucleus для Google App Engine» в соответствии с трассировкой стека. Я немного поохотился, и, похоже, есть сообщение об этой конкретной проблеме здесь .

Похоже, что это было исправлено и позже проверено (14 августа 2009 г.). Поэтому, возможно, вы могли бы попробовать более позднюю версию и посмотреть, исчезнет ли проблема?

0 голосов
/ 15 февраля 2010

Когда вы получаете NPE при transaction.commit(), тогда transaction равно null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...