我想在启动时使用JPA 2.1 eclipselink访问数据库。当它运行时,我在控制台日志中成功登录但它抛出表或视图不存在。但是,如果我通过休息服务在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
}
}
答案 0 :(得分:0)
如果要在初始化bean之后调用它,doSomething将需要@PostConstruct。此外,如果你有依赖关系,你需要在初始化bean之前可用,然后你可以使用@DependsOn
答案 1 :(得分:0)
这解决了我的问题。
如果使用JEE和JTA管理实体管理器,则指定代理用户和密码可能会更困难,因为实体管理器和JDBC连接不在应用程序控制之下。只要在建立数据库连接之前完成此操作,仍可以在EntityManager对象上指定持久性单元属性。 EclipseLink Solutions Guide for EclipseLink
编辑:确保在每笔交易之前设置它