Hibernate EntityManager NullPointerException Spring+;冬眠+;专家

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

这就是。。。我有一个基于spring3.0的Maven web项目,我想将hibernate+jpa用于我的DA。。。但是当我尝试使用entityManager对象时,我得到了一个nullPointerException。。。代码如下:

@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…仍然有问题要找到它!但是你的贡献完全准确