entityManager.persist(object)NullPointerException

时间:2012-09-28 08:01:17

标签: java spring hibernate glassfish-3 entitymanager

我整个星期都在苦苦学习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 injection results in NullPointerException。但我太新了,无法理解如何在我的代码中实现它。另外,我使用的是Glassfish 3.1.2。

有人请帮忙解决一些代码示例吗?

EDIT / UPDATE:

下面是我正在使用的persistence.xml文件。我正在运行MySQL和Glassfish。我应该将其保存在WEB-INF下,persistence-context.xmlsrc/main/resourcehibernate.cfg.xml所在的地方{/ 1}}

<?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>

2 个答案:

答案 0 :(得分:0)

setEntityManager 

而不是

setEngityManager  
你有错字。

创建持久性单元,就像这里一样 java.net

并按持久性单元名称注入EntityManager

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

答案 1 :(得分:0)

对于Java EE 5,@PersistenceContext(unitName="your_unit_name")只能用于EJB或Servlet等容器管理对象。

如果您想在非容器托管对象中创建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;
}

如果注入EntityManager,可以参考CDI - Context和Dependency注入。