java - JPA2 EntityManager 为空

标签 java mysql jpa jsf-2 persistence

代码在这里: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

Admin.java https://github.com/knownasilya/Ambience/blob/master/g5.ambience/src/g5/ambience/user/admin/model/Admin.java

持久性.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/

相关文章:

java - 将子实体持久化操作级联到其父实体

java - Eclipse RCP 应用程序中的 NoClassDefFoundError

java - 事件无限循环 SWT

php - 无法正确检索索引 mysqli

php - Laravel db 迁移 - renameColumn 错误 - 请求了未知的数据库类型枚举

java - JPA:保留/更新子项期间的事件通知?

java - 从命令行在 Maven 中设置 cucumber-jvm 选项

java - 是否可以映射名称与表列不同的 POJO 字段?

php - PDO::quote 的默认字符集

java - 如何在 Spring 中将 jpa 属性加载到数据源?