Hibernate EntityManager NullPointerException Spring+;冬眠+;专家
这就是。。。我有一个基于spring3.0的Maven web项目,我想将hibernate+jpa用于我的DA。。。但是当我尝试使用entityManager对象时,我得到了一个nullPointerException。。。代码如下:Hibernate EntityManager NullPointerException Spring+;冬眠+;专家,hibernate,spring,jpa,maven,Hibernate,Spring,Jpa,Maven,这就是。。。我有一个基于spring3.0的Maven web项目,我想将hibernate+jpa用于我的DA。。。但是当我尝试使用entityManager对象时,我得到了一个nullPointerException。。。代码如下: @Repository @Component public class DAOPersonImp implements DAOPerson{ @PersistenceContext private EntityManager entityManager; @O
@Repository
@Component
public class DAOPersonImp implements DAOPerson{
@PersistenceContext
private EntityManager entityManager;
@Override
public Person getById(int id) {
// TODO Auto-generated method stub
return entityManager.find(Person.class, id);
}
@Override
@Transactional
public List<Person> getAll() {
Query query = entityManager.createQuery("SELECT * FROM PERSON");
List<Person> persons = null;
persons = query.getResultList();
return persons;
}
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="PersistUnit" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
不知道你们需要多少信息,但我会给你们任何你们需要的
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="PersistUnit" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
非常感谢!请原谅我糟糕的英语…PersistenceContex没有注入entitymanager。因此您得到的是NullPointerException确保persistence.xml位于正确的位置,并且其单元名称正确。我还发布了一个配置示例,以便您可以相应地配置applicationContex
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="PersistUnit" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- Prints used SQL to stdout -->
<property name="showSql" value="${hibernate.show.sql}"/>
<!-- Generates tables. -->
<property name="generateDdl" value="${hibernate.generate.ddl}"/>
<property name="databasePlatform" value="${postgres.hibernate.database.platform}"/>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${postgres.datasource.driver.class}"/>
<property name="jdbcUrl" value="${postgres.datasource.jdbc.url}"/>
<property name="user" value="${postgres.datasource.username}"/>
<property name="password" value="${postgres.datasourse.password}"/>
<property name="minPoolSize" value="1"/>
<property name="acquireIncrement" value="1"/>
<property name="maxPoolSize" value="3"/>
</bean>
<tx:annotation-driven transaction-manager="postgres.transactionManager"/>
<bean id="postgres.transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter" ref="jpaAdapter"/>
<property name="persistenceUnitManager" ref="persistenceUnitManager"/>
<property name="persistenceUnitName" value="PersistenceUnit"></property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="PersistUnit" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="MYSQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
你的applicationContext.xml中有吗?我不太熟悉Hibernate或Spring,但在使用JSF时,@PersistenceContext
是用它的单元名编写的,比如@PersistenceContext(unitName=“yournunitname”)
。我想这可能是个问题。如何调用dao.getAll()?它看起来像是您直接创建的DAOPersonImp
,但它应该是Spring的管理器(您不需要@Component
)!在FriendListLogic
(应标记为@Component
)中,您应具有@Autowired-DAOPerson
和在FriendListController
(应标记为@Controller
)中,您应具有@Autowired FriendListLogic FriendListLogic
@dma_k我只是照你说的做了。。。错误也会改变!现在我在创建bean时遇到了问题(似乎是自动连线的问题)。。。对于错误输出的长度感到抱歉,但是。。。我不想错过任何线索。以下是org.springframework.beans.factory.BeanCreationException:创建名为“friendListLogic”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动关联字段:com.divux.onex.daoImp.DAOPersonImp com.divux.onex.logic.FriendListLogic.dao(没有足够的字符用于输出信息,是的,我似乎没有在正确的目录中获取persistence.xml…仍然有问题要找到它!但是你的贡献完全准确