Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用EJB和JPA持久化到数据库时出现问题_Java_Jpa_Nullpointerexception_Ejb - Fatal编程技术网

Java 使用EJB和JPA持久化到数据库时出现问题

Java 使用EJB和JPA持久化到数据库时出现问题,java,jpa,nullpointerexception,ejb,Java,Jpa,Nullpointerexception,Ejb,这是实体 package com.ose.bookstore.model.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * Entity implementation class for Entity: Login * */ @Entity

这是实体

  package com.ose.bookstore.model.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 * Entity implementation class for Entity: Login
 *
 */
@Entity
public class Login implements Serializable {


    private static final long serialVersionUID = 1L;

    public Login() {
        super();
    }
    @Id
    @GeneratedValue
    private int loginId;
    private String userEmail;
    private String password;
    private String secPassword;



    public String getUserEmail() {
        return userEmail;
    }
    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSecPassword() {
        return secPassword;
    }
    public void setSecPassword(String secPassword) {
        this.secPassword = secPassword;
    }
    public int getLoginId() {
        return loginId;
    }
    public void setLoginId(int loginId) {
        this.loginId = loginId;
    }
}
这是控制器/测试类

package com.ose.bookstore.model.test;

import javax.ejb.EJB;
import javax.faces.bean.SessionScoped;

import com.ose.bookstore.model.ejb.LoginDao;
import com.ose.bookstore.model.entity.Login;

/**
 * @author nishant
 * 
 */
@SessionScoped
public class LoginTest1 {

    @EJB
    private static LoginDao loginDao;

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Login login = new Login();
            login.setLoginId(2);
        login.setPassword("asdf");
        login.setSecPassword("asdfsadF");
        login.setUserEmail("email");
        loginDao.writeToDb(login);
    }
}
下面是EJB类

package com.ose.bookstore.model.ejb;

import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.ose.bookstore.model.entity.Login;

/**
 * @author nishant
 *
 */
@Remote
@Stateless
public class LoginDao {

    public LoginDao() {
        super();
        // TODO Auto-generated constructor stub
    }
    @PersistenceContext
    private EntityManager entityManager; 
    public void writeToDb(Login login){
        entityManager.persist(login);
    }

}
我在loginDao.writeToDb(login)中收到此错误

线程“main”java.lang.NullPointerException中出现异常 在com.ose.bookstore.model.test.LoginTest1.main上
LoginTest1是控制器/测试类的类名

您需要创建一个公开业务方法的远程/本地接口

ejb客户端应用程序将使用此接口

若ejb客户端和部署ejb会话bean的环境相同,则使用@Local注释

如果ejb客户机处于部署ejb会话bean的不同环境中,请使用@Remote注释

@Remote
public interface LoginDaoRemote {
   public void writeToDb(Login login);
}

@Stateless
public class LoginDao implements LoginDaoRemote {

@Override
public void writeToDb(Login login){
    entityManager.persist(login);
  }
}

您需要在内部执行客户机代码。否则,@EJB本地注入就不起作用(您的测试代码像javastandalone一样执行,但它需要一个注入EJB的容器)

尝试删除
@EJB private static LoginDao LoginDao中的
static
由于对象必须在主类中使用,loginDao必须是静态的,因此无法对非静态字段loginDao进行静态引用