В настоящее время я занимаюсь рефакторингом своего кода и заметил, что могу использовать общий абстрактный класс для работы CRUD.Но, к сожалению, я застрял прямо знаю.Проблема в том, что когда я внедряю свои классы DAO в классы Service, мне нужно использовать удаленный интерфейс объекта (в моем случае Категория), см. Код ниже.
Удаленный интерфейс для универсального dao
public interface IGenericDaoRemote<T> {
void add(T t);
void remove(T t);
void update(T t);
List<T> getAll(Class<T> type);
}
Абстрактный класс универсальный дао
@Stateless
@Remote(IGenericDaoRemote.class)
@Local(IGenericDaoLocal.class)
public abstract class GenericDao<T> implements IGenericDaoLocal<T>, IGenericDaoRemote<T> {
@PersistenceContext(name = "postgresPersistant")
private EntityManager entityManager;
@Override
public void add(T t) {
Session session = entityManager.unwrap(Session.class);
session.save(t);
}
@Override
public void remove(T t) {
Session session = entityManager.unwrap(Session.class);
session.delete(t);
}
@Override
public void update(T t) {
Session session = entityManager.unwrap(Session.class);
session.update(t);
}
@Override
public List<T> getAll(Class<T> type) {
Session session = entityManager.unwrap(Session.class);
Criteria criteria = session.createCriteria(type).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return criteria.list();
}
}
Пример класса дао:
@Stateless
@Remote(ICategoryDaoRemote.class)
@Local(ICategoryDaoLocal.class)
public class CategoryDao extends GenericDao<Category> implements ICategoryDaoRemote, ICategoryDaoLocal {
}
Класс обслуживания:
@Stateless
@Local(ICategoryServiceLocal.class)
@Remote(ICategoryServiceRemote.class)
public class CategoryService implements ICategoryServiceRemote, ICategoryServiceLocal {
@EJB
private ICategoryDaoRemote categoryDao; // <-- here is a problem
.
.
.
}
Как видите, яЯ использую интерфейс ICategoryDaoRemote
как тип инициализированной переменной. У меня нет доступа к общим методам dao.Я скучаю по чему-то легкому / основному?Или есть ли другой способ сделать это?
Пожалуйста, наберитесь терпения на мой английский, я старался изо всех сил!