Spring Hibernate JPA EntityManager.Persist()NullPointerException

时间:2012-12-06 10:21:47

标签: spring hibernate jpa entitymanager

我在使用返回Persist()的{​​{1}} EntityManager方法时遇到问题,这里是我的代码:

NullPointerExpception

Excetion符合@Repository("chainDao") public class ChainDaoImpl implements ChainDao{ private EntityManager em; @PersistenceContext(unitName="hibernatePersistenceUnit") public void setEntityManager(EntityManager em) { this.em = em; } public int saveChain(Chain chain) { em.persist(chain); return 0; } }

这是我的em.persist(chain)

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="hibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL"> <properties> <property name="hibernate.hbm2ddl.auto" value="none" /> </properties> </persistence-unit> </persistence>

的片段
applicationContext.xml

迹:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="${database.driver}"
p:jdbcUrl="${database.url}"
p:user="${database.user}"
p:password="${database.password}"
p:acquireIncrement="5"
p:idleConnectionTestPeriod="60"
p:maxPoolSize="100"
p:maxStatements="50"
p:minPoolSize="10" />
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
<property name="persistenceUnitName" value="hibernatePersistenceUnit" />
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
<property name="showSql" value="true"/>
</bean>
</property>
</bean>

任何线索我错过了什么?

1 个答案:

答案 0 :(得分:2)

注入的实体管理器只是一个代理。基于与使用实体管理器的方法相关联的@Transactional注释中的传播属性值,在运行时注入实际实体管理器实现。因此,请将方法saveChain@Transactional注释相关联,如下所示。

@Transactional
public int saveChain(Chain chain) {
    em.persist(chain);
    return 0;
}

强烈建议您阅读此注释的文档,并使用与您的用例相关的值设置注释属性。

修改

Spring DI框架似乎没有选择setter setEntityManager,因为属性名称为em。您可能希望将属性em重命名为entityManager,或将设置器setEntityManager重命名为setEm,或将@PersistenceContext注释重命名为属性并尝试。