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进行静态引用