无法创建EntityManager

时间:2010-04-14 17:43:14

标签: java jpa ejb-3.0

EJB3的新手,请帮助/解释。

在会话bean中,我声明了一个EntityManager,如下所示

@PersistenceContext(unitName="ScheduleUnit")
private EntityManager em;

这是有效的。但是当我这样做时

private EntityManager em;
private EntityManagerFactory emf;

public void myFunction() {
  emf = Persistence.createEntityManagerFactory("ScheduleUnit");
  em = emf.createEntityManager();
}

我收到以下错误:

A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property

2 个答案:

答案 0 :(得分:0)

目前还不清楚你在哪里使用第二个代码片段(它是否在EJB中?如果是,你不应该在像EJB容器这样的托管环境中使用EntityManagerFactory)。你能澄清一下吗?

另请注明您的persistence.xml(错误消息是关于此文件不包含所需信息)。

答案 1 :(得分:0)

我认为, EntityManagerFactory 无法找到您的持久性单元中指定的数据源。对于Glassfish,此信息存储在 sun-resources.xml 文件中。 是j2ee申请吗?如果是这样,最好使用依赖注入 @PersistenceContext 注释(如Pascal所说)。

此外,您可以尝试使用方法createEntityManagerFactory(String persistenceUnitName, Map properties)并在属性地图

中指定“ConnectionDriverName” propety
private EntityManager em;
private EntityManagerFactory emf;

public void myFunction() {
  HashMap<String, String> properties = new HashMap<String, String>();
  properties.put("ConnectionDriverName", "org.postgresql.Driver");  //as for Postgres
  emf = Persistence.createEntityManagerFactory("ScheduleUnit", properties);
  em = emf.createEntityManager();
}