我想在启动时使用JPA 2.1 eclipselink访问数据库。当它运行时,我在控制台日志中成功登录,但它抛出的表或视图不存在。然而,如果我通过rest服务调用servlet中的dao,一切都会正常运行。我是不是错过了什么?
public abstract class BaseDao {
@PersistenceContext(unitName = "myUnit")
protected EntityManager em;
public void create(Object entity);
public Ojbect get();
}
@Stateless
public class MyDaoService extends BaseDao {
@Override
public void create(Object entity) {
this.em.persit(entity);
}
// ...
}
@Singleton
@Startup
public class MySingleton{
@EJB
private MyDaoService service;
@Schedule(hours="*", minutes="*", seconds="*/30")
public void doSomething() {
MyEntity entity = new MyEntity();//assumed I have entity object
entity.setFirstName("firstName");
entity.setLastName("lastName");
service.create(entity); // >>>Table or view does not exist exception
}
}
如果您想在bean初始化后调用doSomething,它将需要一个@PostConstruct。此外,如果您有依赖项,您需要在初始化该bean之前可用,那么您可以使用@DependsOn
这解决了我的问题。
如果使用JEE和JTA管理的实体管理器,指定代理用户和密码可能会更加困难,因为实体管理器和JDBC连接不受应用程序控制。只要在建立数据库连接之前完成,仍然可以在EntityManager对象上指定持久性单元属性。EclipseLink 解决方案指南
EDIT:确保在每次交易前设置