我整个星期都在努力学习Java EE。我正在使用Restlet2.0、Spring、Hibernate和Maven通过Netbeans 7.2构建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。
有没有人能帮我拿一些代码样本?
编辑/更新:
下面是我正在使用的persistence.xml文件。我正在运行MySQL和Glassfish。我应该将它保存在persistence-context.xml所在的WEB-INF下,还是hibernate.cfg.xml所在的src/main/resource下?
<?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>发布于 2012-09-28 16:04:45
setEntityManager 而不是
setEngityManager 你打错了。
创建持久化单元,如下所示
java.net
并通过持久化单元的名称注入EntityManager
@PersistenceContext(unitName="your_unit_name")
private EntityManager em;发布于 2012-09-28 18:27:17
在JavaEE5中,@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;
}在JavaEE6中,您可以参考CDI上下文和依赖项注入来了解如何注入EntityManager。
发布于 2021-09-17 13:31:59
上面的答案很有用。非常简短的说法是,您的EntityManager很可能为空。调用本身不应该抛出空指针异常。
https://stackoverflow.com/questions/12635975
复制相似问题