在下面的服务中,我正在尝试初始化我的Dao并将EntityManager注入其中。我们没有在这个项目中使用spring。我的IDE抱怨调用setEntityManager()
,因为它无法识别该对象始终是GenericDao
。这是正确的方法吗?
public class GenericService<T, Dao> {
private static Logger logger = Logger.getLogger(Logger.class.getName());
protected Dao dao;
protected EntityManager em;
public GenericService(Class<Dao> daoClass) {
try {
dao = daoClass.newInstance();
EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit");
em = emf.createEntityManager();
dao.setEntityManager(em);
} catch(InstantiationException e) {
logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass());
} catch(IllegalAccessException e) {
logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass());
}
}
}
答案 0 :(得分:2)
你可以使用演员:
((GenericDao)dao).setEntityManager(em);
但我想如果你知道它总是一个GenericDao,那么为什么不把它作为那种类型开始,例如。
protected GenericDao dao;
并改变类声明:
public class GenericService<T, GenericDao>