2014-10-07 84 views
1

我收到了一個帶有以下代碼和配置的NullPointerException,我不知道爲什麼。我希望在調試這個問題時有所幫助。JPA EntityManager沒有被注入到Java EE應用程序中

文件的persistence.xml

<persistence-unit name="adismPersistenceUnit" transaction-type="RESOURCE_LOCAL" > 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.adism.domain.Ad</class> 
    <properties> 
     <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/adism" /> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> 
     <property name="hibernate.connection.username" value="root" /> 
     <property name="hibernate.connection.password" value="" /> 
    </properties> 

</persistence-unit> 

實體類:

@Entity @Table(name = "ads") public class Ad { 
    private Integer adId; 
    private String adTitle; 

    public Ad(){} 

    @Id 
    @Column(name="adid") 
    @GeneratedValue 
    public Integer getAdId(){ 
     return adId; 
    } 


    public void setAdId(Integer adId){ 
     this.adId = adId; 
    } 

    @Column(name="adtitle") 
    public String getAdTitle(){ 
     return this.adTitle; 
    } 

    public void setAdTitle(String title){ 
     this.adTitle = title; 
    } 

} 

DAO實現:

public class AdDaoImpl implements AdDao{ 

    @PersistenceContext 
    public EntityManager entityManager; 

    @Override 
    public void save(Ad ad){ 
    entityManager.persist(ad); 
    } 

}

當我運行下面的JSP代碼,我得到NullPointerException異常

Ad ad = new Ad(); 
ad.setAdId(1000); 
ad.setAdTitle("JPA pure"); 
AdDao newDao = new AdDaoImpl(); 
newDao.save(ad); 
+0

你在哪裏注射它? – uaiHebert 2014-10-07 22:36:59

+0

剛剛編輯的問題,我注入它像@PersistenceContext公共EntityManager entityManager; – 2014-10-07 22:39:02

+0

不知道:S第一次這樣做 – 2014-10-07 22:44:31

回答

1

如果你只是做AdDao newDao = new AdDaoImpl();您的容器將不知道從哪裏注入的EntityManager。

如果您正在使用JBoss或Glassfish的(或一些其它類型的EJB Containner的),你需要聲明AdDao爲EJB:

@Stateless 
public class AdDao() {} 

你會用它在你的servlet,如:

@EJB 
public AdDao ejb; 

PS .:我不會在控制器中注入DAO。最好的是在兩者之間使用其他類,但是如果你對這種技術還不熟悉,那就從它開始。


如果您使用的是解決方案,而JPA,你可以這樣做: 私有靜態EntityManagerFactory的電動勢= Persistence.createEntityManagerFactory( 「YOUR_PERSISTENCE_UNIT」); //將它存儲在你的班級

​​
+0

啊,我可能會做一些完全愚蠢的事情,我在想法中運行這個應用程序,並配置了tomcat,它是正確的組合嗎? – 2014-10-07 22:50:29

+0

剛剛發現tomcat缺省情況下是cant主機EJB,它只是實現了Servlet規範。 – 2014-10-07 22:53:36

+0

有沒有其他方法可以使用JPA? – 2014-10-07 22:54:06

相關問題