Весенние проводные и общие классы - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть общий класс доступа к данным:

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 аргумента типа.

...