我收到的NullPointerException
包含以下代码和配置,我不确定原因。我希望在调试此问题时提供一些帮助。
文件 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 :(得分:1)
如果您只是AdDao newDao = new AdDaoImpl();
,您的容器将无法知道注入EntityManager的位置。
如果您使用的是JBoss或Glassfish(或其他类型的EJB Containner),则需要将AdDao声明为EJB:
@Stateless
public class AdDao () {}
你将在你的servlet中使用它,如:
@EJB
public AdDao ejb;
PS:我不会在控制器中注入DAO。最好的是在两者之间使用其他类,但如果你是这种技术的新手,请从它开始。
如果您使用的是没有JPA的解决方案,您可以执行以下操作: private static EntityManagerFactory emf = Persistence.createEntityManagerFactory(“YOUR_PERSISTENCE_UNIT”); //将它存储在你的班级
public void yourMethod(){
final EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
// do your stuff here
entityManager.getTransaction().commit();
entityManager.close();
}