У меня есть требование, что на основе профиля мне нужно внедрить 2 разных класса в уровень DAO для выполнения операции CRUD. Допустим, у нас есть класс A и класс B для профилей a и b соответственно. Теперь в слое DAO без использования условия if else (так как я использую то, что в настоящее время основано на профиле, я использую сервисный уровень для вызова 2 различных методов 1.saveA (), 2.saveB ().) Но есть ли способ чтобы сделать его более общим и основанным на профиле или на основе ссылки на класс, я могу создать экземпляр другой сущности, а также классы JPA? Я пытался использовать
<T extends Parent> T factoryMethod(Class<T> clazz) throws Exception {
return (T) clazz.newInstance();
}
но это также заставит меня привести приведенный объект к классу. Я попытался создать родительский P для обоих классов A и B. И использовал их вместо этого, но запутался, когда вводил типы сущностей в JPARepository.
Я попытался создать SimpleJPARepository, но это не сработало, поскольку в ARepository и BRepository есть переопределенные методы.
Или же,
Есть ли способ я могу использовать один и тот же класс сущности для 2 разных таблиц? таким образом, это может быть решено. для 1 профиля у меня разные наборы столбцов, тогда как для 2-го профиля у меня разные столбцы.
Вот как я ожидаю: возможно ли это? или как у меня сейчас дела обстоят правильно?
public void doStuff(Class<T> class){
GenericRepository repo;
if(class instanceof A){
//use ARepository;
repo = applicationContext.getBean(ARepository);
}else{
//use BRepository;
repo = applicationContext.getBean(BRepository);
}
repo.save(class);
repo.flush();
}