8

这是我的 ApplicationContext.xml 中的代码

    <context:spring-configured />
<context:annotation-config />
<context:component-scan base-package="com.apsas.jpa" />
<tx:annotation-driven />

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="testjpa" />
</bean>

<bean id="entityManager"
    class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

这是我的道实现

public class TeacherDaoImpl implements TeacherDao {

@Autowired
private EntityManager entityManager;

@Transactional
public Teacher addTeacher(Teacher teacher) {
    entityManager.persist(teacher);
    return teacher;

}

}

这是我的主要课程

public class TestApp {

public static void main(String[] args) {

    ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
            "config/ApplicationContext.xml");       

    TeacherDao teacherDao = new TeacherDaoImpl();       
    Teacher teacher1 =  teacherDao.addTeacher(new Teacher("First Teacher"));

}

}

请帮忙,我得到一个空指针异常

Exception in thread "main" java.lang.NullPointerException
at com.apsas.jpa.dao.impl.TeacherDaoImpl.addTeacher(TeacherDaoImpl.java:22)
at com.apsas.jpa.main.TestApp.main(TestApp.java:26)

我在 2 天内解决了这个问题,但我仍然找不到任何可以解决这个问题的资源。如果您给我您的意见、答案或任何可能帮助我解决此问题的想法,我将不胜感激,

ps:我是学习spring的新手

4

2 回答 2

4

由于您在 main 中实例化TeacherDaoImpl自己(使用new关键字),因此 Spring 没有注入EntityManagerNPE,因此也没有注入 NPE。

用注释字段TeacherDaoImpl.entityManager@PersistenceContext注释TeacherDaoImpl类,@Component让 Spring 为您实例化它。然后在你的主目录中,获取那个 bean:

TeacherDao dao = applicationContext.getBean(TeacherDao.class);
// ...

这两个指令似乎也是不必要的:

<context:annotation-config />
<context:spring-configured />

当您使用<context:component-scan />. @Configurable后者仅在您在代码中使用时才有用。

于 2013-10-01T06:05:36.277 回答
3

您将要@PersistenceContext用于注入EntityManager.

PersistenceContext EntityManager 注入 NullPointerException

这几乎是同一个问题。

于 2013-10-01T05:22:20.203 回答