首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityManager.persist(对象) NullPointerException

EntityManager.persist(对象) NullPointerException
EN

Stack Overflow用户
提问于 2012-09-28 16:01:17
回答 3查看 9.1K关注 0票数 0

我整个星期都在努力学习Java EE。我正在使用Restlet2.0、Spring、Hibernate和Maven通过Netbeans 7.2构建REST api。现在,每当我进行试图将数据持久化到数据库的服务调用时,下面的方法都会抛出一个NullPointerException

代码语言:javascript
复制
@Override
public void save(T object) {
    entityManager.persist(object);
}

从代码中可以看出,下面这段代码将注入entityManager

代码语言:javascript
复制
protected EntityManager entityManager;

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

我找到了链接EntityManager injection results in NullPointerException。但我太新了,无法理解如何在我的代码中实现它。另外,我使用的是Glassfish 3.1.2。

有没有人能帮我拿一些代码样本?

编辑/更新:

下面是我正在使用的persistence.xml文件。我正在运行MySQL和Glassfish。我应该将它保存在persistence-context.xml所在的WEB-INF下,还是hibernate.cfg.xml所在的src/main/resource下?

代码语言:javascript
复制
<?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>
EN

回答 3

Stack Overflow用户

发布于 2012-09-28 16:04:45

代码语言:javascript
复制
setEntityManager 

而不是

代码语言:javascript
复制
setEngityManager  

你打错了。

创建持久化单元,如下所示

java.net

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

代码语言:javascript
复制
@PersistenceContext(unitName="your_unit_name")
private EntityManager em;
票数 0
EN

Stack Overflow用户

发布于 2012-09-28 18:27:17

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

如果您想要在非容器托管对象中创建EntityManager对象,请参考以下示例。

代码语言:javascript
复制
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;
}

在JavaEE6中,您可以参考CDI上下文和依赖项注入来了解如何注入EntityManager。

票数 0
EN

Stack Overflow用户

发布于 2021-09-17 13:31:59

上面的答案很有用。非常简短的说法是,您的EntityManager很可能为空。调用本身不应该抛出空指针异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12635975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档