entityManager.persist(对象)NullPointerException

问题描述 投票:0回答:3

我整个星期都在努力学习 Java EE。我正在通过 Netbeans 7.2 使用 Restlet 2.0、Spring、Hibernate 和 Maven 构建 REST api。现在,每当我进行尝试将数据保存到数据库的服务调用时,以下方法都会抛出

NullPointerException

@Override
public void save(T object) {
    entityManager.persist(object);
}

从代码来看,下面的代码应该是注入

entityManager

protected EntityManager entityManager;

@PersistenceContext
public void setEngityManager(EntityManager entityManger) {
    this.entityManager = entityManager;
}

我找到了链接EntityManager注入导致NullPointerException。但我太新了,无法理解如何在我的代码中实现它。另外,我正在使用 Glassfish 3.1.2。

有人可以帮忙提供一些代码示例吗?

编辑/更新:

下面是我正在使用的 persistence.xml 文件。我正在运行 MySQL 和 Glassfish。我应该将其保存在

WEB-INF
下(
persistence-context.xml
所在位置)还是保存在
src/main/resource
下(
hibernate.cfg.xml
所在位置)吗?

<?xml version="1.0" encoding="UTF-8"?>
<persistence-unit name="pu1" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.mysite.restapi.RestletChildApplication</class>
    <properties>
            <property name="hibernate.connection.driver_class"
                    value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.url"
                    value="jdbc:mysql://localhost:3306/mydatabase" />
            <property name="hibernate.connection.username" value="myname"/>
            <property name="hibernate.connection.password" value="mypassword"/>
            <property name="show_sql" value="true" />
            <property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
    </properties>
</persistence-unit>
java spring hibernate glassfish-3 entitymanager
3个回答
0
投票
setEntityManager 

而不是

setEngityManager  

你有错别字。

创建持久性单元,如下所示
java.net

并通过持久化单元的名称注入EntityManager

@PersistenceContext(unitName="your_unit_name")
private EntityManager em;

0
投票

在 Java EE 5 中,

@PersistenceContext(unitName="your_unit_name")
只能用于容器管理的对象,如 EJB 或 Servlet。

如果您想在非容器管理对象(如普通 java 类)中创建 EntityManager 对象,请参考以下示例。

private EntityManagerFactory emf;

public static EntityManagerFactory getEntityManagerFactory() {
    if (emf == null) {
        emf = Persistence.createEntityManagerFactory("your_unit_name");
    }
    return emf;
}

public static EntityManager getEntityManager() {
    EntityManager entityManager = null;
    if (null != emf)
           entityManager = emf.createEntityManager();

    return entityManager;
}

如果是 Java EE 6,您可以参考 CDI - 上下文和依赖注入来了解如何注入 EntityManager。


0
投票

以上答案很有用。非常简短的版本是您的 EntityManager 可能为空。调用本身不应引发空指针异常。

© www.soinside.com 2019 - 2024. All rights reserved.