次のような汎用 DAO クラスがあります。
public class GenericDaoJpa <T extends DomainObject> implements GenericDao<T> {
private final Class<T> type;
@PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="myPersistenceUnit")
protected EntityManager entityManager;
public GenericDaoJpa(Class<T> type) {
super();
this.type = type;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public T get(Object id) {
return (T) entityManager.find(type, id);
}
}
実装 DAO クラスは次のようになります。
@Repository("appDao")
public class ProductDaoJpa extends GenericDaoJpa<Product> implements ProductDao{
public ProductDaoJpa() {
super(Product.class);
}
public List<Product> getAllProducts() {
return getAll();
}
}
別のデータベース用に mySecondPersistenceUnit という別の persistentUnit を構成しました。GenericDaoJpa クラスも拡張するが、別の永続ユニットを使用する新しい DAO クラスを作成したいと思います。GenericDaoJpa クラスを拡張し、DAO ごとに異なる永続ユニットを使用するにはどうすればよいですか?
この宣言を各 DAO クラスに移動しようとしましたが、entityManager への参照がないため、親クラスがコンパイルされません。
@PersistenceContext(type=PersistenceContextType.TRANSACTION, unitName="myPersistenceUnit")
protected EntityManager entityManager;