1

以下のサービスでは、Dao を初期化し、EntityManager を挿入しようとしています。このプロジェクトでは春を使用していません。オブジェクト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());
        }
    }
}
4

1 に答える 1

2

キャストを使用できます:

((GenericDao)dao).setEntityManager(em);

しかし、それが常に GenericDao であることがわかっている場合は、最初からそのタイプにしないでください。

protected GenericDao dao;

クラス宣言も変更します。

public class GenericService<T, GenericDao>
于 2013-02-18T20:44:09.830 に答える