我有一个像这样的类:
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@Stateless
public class BlogEntryDao {
EntityManager em;
@PostConstruct
public void initialize(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persistence");
em = emf.createEntityManager();
}
public void addNewEntry(){
Blogentry blogentry = new Blogentry();
blogentry.setTitle("Test");
blogentry.setContent("asdfasfas");
em.persist(blogentry);
}
}
所以我的托管bean调用了这个方法。到这里没有问题。但是由于initialize方法没有被调用,我在em.persist中遇到了NPE。
为什么initialize方法没有被调用?我在Glassfish服务器上运行这个。
EntityManager
;EntityManager
大致相当于一个会话。如果你真的需要处理自己的会话管理(注入 @PersistenceContext 更好),你应该在每次调用addNewEntry
时创建和关闭一个EntityManager
。 - chrylis -cautiouslyoptimistic-new BlogEntryDao()
,那么容器可能不知道如何将其初始化为一个 bean。 - chrylis -cautiouslyoptimistic-