代码在这里:http://github.com/knownasilya/Ambience
我正在通过我的 index.xhtml
测试持久性在我的 Admin 类中,我使用 @PersistenceContext
实例化 EntityManager注解。每次我运行这个例子时,我都会在em.persist(another);
处得到NPE。 .
我有persistence.xml
使用与 Eclipse 中的本地数据库配置相同的连接信息进行设置。如何找出错误所在?
编辑以下是相关文件。
索引.xhtml https://github.com/knownasilya/Ambience/blob/master/g5.ambience/WebContent/index.xhtml
持久性.xml https://github.com/knownasilya/Ambience/blob/master/g5.ambience/src/META-INF/persistence.xml
EDIT2 我创建了一个 UserDAO,但当我尝试在第 24 行专门创建 EntityManager 时,我仍然得到一个 NPE
EntityManager em = emf.createEntityManager();
出现此错误 Caused by: java.lang.NullPointerException
at g5.ambience.user.UserDAO.<init>(UserDAO.java:24)
UserDAO.java https://github.com/knownasilya/Ambience/blob/master/g5.ambience/src/g5/ambience/user/UserDAO.java
EDIT3 我现在有 3 层抽象/封装。模型(用于持久化的 getter/setter)、业务逻辑和 View 逻辑。
我在这里有我的实体工厂:http://bit.ly/HV4d11 ,这是一个应用程序范围的托管 bean。然后我有 ManagedUserBean http://bit.ly/In19rX当我调用 getUserByUsername
时,它仍然给我一个 NPE通过 UserView 的方法http://bit.ly/In1ta6 ( session 范围)。仍然不走运,错误出在 EntityManager 创建上,这是我的 stackTrace:http://pastie.org/3814236
最佳答案
UserDAO 需要是一个 EJB bean,例如@Stateless 使用@PersistenceContext 注解。 好的设计模式是创建两层
- 支持 bean - 用于 UI 的托管 bean,您可以在 XHTML 中使用它们。
- 服务层,或者您所说的 DAO - 实现基本业务逻辑的无状态 bean
您决定什么是业务逻辑以及什么是 UI 相关逻辑。
如果您使用 JEE6 CDI 解决方案,则无需在 faces-config.xml 中声明托管 bean
关于java - JPA2 EntityManager 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199408/