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
答案 0 :(得分:0)
目前还不清楚你在哪里使用第二个代码片段(它是否在EJB中?如果是,你不应该在像EJB容器这样的托管环境中使用EntityManagerFactory
)。你能澄清一下吗?
另请注明您的persistence.xml
(错误消息是关于此文件不包含所需信息)。
答案 1 :(得分:0)
我认为, EntityManagerFactory 无法找到您的持久性单元中指定的数据源。对于Glassfish,此信息存储在 sun-resources.xml 文件中。 是j2ee申请吗?如果是这样,最好使用依赖注入 @PersistenceContext 注释(如Pascal所说)。
此外,您可以尝试使用方法createEntityManagerFactory(String persistenceUnitName, Map properties)并在属性地图
中指定“ConnectionDriverName” propetyprivate 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();
}