gpt4 book ai didi

java - JPA EntityManager 未注入(inject) Java EE 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:58 24 4
gpt4 key购买 nike

我收到带有以下代码和配置的 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);

最佳答案

如果您只是执行AdDao newDao = new AdDaoImpl();,您的容器将不知道在哪里注入(inject)EntityManager。

如果您使用 JBoss 或 Glassfish(或其他类型的 EJB 容器),您需要将 AdDao 声明为 EJB:

@Stateless
public class AdDao () {}

您将在 servlet 中使用它,例如:

@EJB
public AdDao ejb;

PS:我不会在 Controller 中注入(inject) DAO。最好是在两者之间使用其他类,但如果您对这种技术不熟悉,请从它开始。

<小时/>

如果您使用的解决方案没有 JPA,您可以执行以下操作: 私有(private)静态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();
}

关于java - JPA EntityManager 未注入(inject) Java EE 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26246368/

24 4 0
文章推荐: html - 无法匹配
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com