У меня есть общий класс доступа к данным:
public class DAO<T extends OrganisationalEntity, TR extends OrganisationalRepository<T>> {
@Autowired OrganisationRepository organisationRepository;
@Autowired TR entityRepository;
...
}
Имеет тип сущности, подтип OrganisationalEntity
и тип хранилища, подтип OrganisationalRepository<T>
в качестве аргументов типа.
OrganisationalEntity
это интерфейс:
public interface OrganisationalEntity {
Organisation getOrganisation();
void setOrganisation(Organisation organisation);
}
Как и OrganisationalRepository
, расширяющий интерфейс JpaRepository
:
public interface OrganisationalRepository<T extends OrganisationalEntity>
extends JpaRepository<T, Long> {...}
Из этого я пытаюсь создать класс доступа к данным для определенного типа данных:
@Component
public class IssueDAO extends DAO<Issue, IssueRepository> {...}
И затем автоматически подключить этот класс доступа к данным в моем контроллере:
@RestController
@Transactional
class IssueController {
...
@Autowired
IssueDAO issueDAO;
...
}
Но это приводит к следующей ошибке:
...
Error creating bean with name 'issueDAO'
...
Failed to instantiate [IssueDAO]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Expected 1 type argument on generic interface [DAO<Issue, IssueRepository>] but found 2
...
Почему ожидается 1 аргумент, если есть 2?
Даже в сообщении об ошибке перечислены 2 аргумента типа.