[英]I am a getting a java.lang.NullPointerException when using the remove(T entity) method for JPA
kindly help me out with this NullPointerException error i am getting while trying to use the remove(T entity) method in JPA 请尝试在JPA中使用remove(T实体)方法时遇到此NullPointerException错误,请帮助我
Here is my code 这是我的代码
ControllerServlet ControllerServlet
}else if (userPath.equals("/confirm_delete")){
String userid = request.getParameter("userToDelete");
int usrId = Integer.valueOf(userid);
SystemusersFacade usertoDelete = new SystemusersFacade();
Systemusers user = new Systemusers();
user = systemusersFacade.find(usrId);
usertoDelete.remove(user);
userPath ="/view_users";
SystemusersFacade extends AbstractFacade that contains the remove(T entity) method) SystemusersFacade扩展了AbstractFacade,其中包含remove(T实体)方法)
remove(T entity) method
public void remove(T entity) {
System.out.println(entity);
getEntityManager().remove(getEntityManager().merge(entity));
}
Below is the NullPointerException i am getting 以下是我得到的NullPointerException
Info: theBankingGuide was successfully deployed in 13,022 milliseconds.
Info: WebModule[null] ServletContext.log():ControllerServlet:
Info: entity.Systemusers[ userId=1 ]
Warning: StandardWrapperValve[ControllerServlet]: Servlet.service() for servlet ControllerServlet threw exception
java.lang.NullPointerException
at session.AbstractFacade.remove(AbstractFacade.java:35)
at controller.ControllerServlet.doPost(ControllerServlet.java:212)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
I am sure that the entity is not passed as a null because when i use a System.out.Print, it gives me a value as you see in the log above Info: entity.Systemusers[ userId=1 ] 我确信该实体不会作为null传递,因为当我使用System.out.Print时,它为我提供了一个值,如您在上面的Info日志中所看到的:entity.Systemusers [userId = 1]
I have also checked the debugger and the entity variable exits with the following parameters 我还检查了调试器,并使用以下参数退出了实体变量
entity Systemusers #1232
Static
_persistence_cacheKey HardCacheWeakIdentityMap$ReferenceCacheKey #1280
_persistence_fetchGroup null
_persistence_href null
_persistence_listener AttributeChangeListener #1281
_persistence_primaryKey Integer ObjectFieldVariable _persistence_primaryKey
_persistence_relationshipInfo null
_persistence_session null
_persistence_shouldRefreshFetchGroup boolean false
adsCollection IndirectList size = 0
mmtransinfoCollection IndirectList size = 0
securitiesinfoCollection IndirectList size = 0
systemUsersTime Date 02-Jan-2015 20:09:52
userEmail String jonahkayizzi@gmail.com
userId Integer 1
userName String "Jonah"
userPassword String "0xgl#kylZ"
userType String "Manager"
I also tried creating my custome delete function in the SystemusersFacade and i got the same error. 我还尝试在SystemusersFacade中创建我的客户删除功能,但遇到了同样的错误。
Please help out 请帮忙
EDIT 编辑
package session;
import entity.Systemusers;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
*
* @author Jonah
*/
@Stateless
public class SystemusersFacade extends AbstractFacade<Systemusers> {
@PersistenceContext(unitName = "theBankingGuidePU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public SystemusersFacade() {
super(Systemusers.class);
}
}
package session;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public abstract class AbstractFacade<T> {
private Class<T> entityClass;
public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}
protected abstract EntityManager getEntityManager();
public void remove(T entity) {
System.out.println(entity);
getEntityManager().remove(getEntityManager().merge(entity));
}
}
SystemusersFacade usertoDelete = new SystemusersFacade()
is your problem (ignoring strange name, maybe a copy/paste error). SystemusersFacade usertoDelete = new SystemusersFacade()
是您的问题(忽略奇怪的名称,也许是复制/粘贴错误)。 Since you instantiate it using new
, you are bypassing container management so the annotations are not processed. 由于使用
new
实例化了它,因此绕过了容器管理,因此不处理注释。 You need to inject the bean into the class that uses it. 您需要将bean注入使用它的类中。 Use something like this
使用这样的东西
@EJB
private SystemusersFacade systemusersFacade;
...
String userid = request.getParameter("userToDelete");
int usrId = Integer.valueOf(userid);
Systemusers user = systemusersFacade.find(usrId);
systemusersFacade.remove(user);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.