Почему интерфейс репо, расширяющий 2 других интерфейса репо, не подключен к контроллеру? - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь следовать документации, как описано здесь , но она не работает, потому что я получаю эту ошибку:

Ошибка создания bean-компонента с именем memberRepository: сбой вызова метода init; вложенное исключение - java.lang.IllegalArgumentException: не управляемый тип: класс com.timewin.application.model.Member

это класс участника:

public class Member {
    private String name;
    private List<Activity> activities = new ArrayList<>();


    public Member() {

    }

    public Member(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public List<Activity> getActivities() {
        return activities;
    }

    public void setActivities(Activity activity) {
        getActivities().add(activity);
        System.out.println("Member: 'activities' of " + this.getName() + " was set to " + activity.getType());
        activity.update(this);
    }

}

Это интерфейсы репозитория и реализация:

@Repository
public interface MemberRepository extends JpaRepository<Member, Float>, MemberRepositoryCustom{
}

public interface MemberRepositoryCustom {
    public void createMember(String memberName);
    public void addActivityToMember(Activity activity, String member);
    public void addMemberToActivity(String member, Activity activity);
}

@Repository
public class MemberRepositoryImpl implements MemberRepositoryCustom{
    //implementation here
}

и я пытаюсь автоматически подключить MemberRepository в контроллере:

@Autowired
MemberRepository memberRepository;

1 Ответ

0 голосов
/ 28 октября 2018

JpaRepository должен работать с классами, которые являются управляемыми объектами, поэтому, если класс Member является отражением некоторой таблицы БД member, то вы должны аннотировать его @Entity и @Table (как класс Activity)

@Entity
@Table(name = "member")
public class Member {
    @Column(name="name")
    private String name;
    @JoinColumn(name = "...", referencedColumnName="...")
    @OneToMany(...)
    private List<Activity> activities;

}

Вот хороший справочник , как работать с сущностями А также вы должны настроить конфиг для работы с этой функциональностью:

@Configuration
/****/
@EnableJpaRepositories("com.timewin.application.repository")
@EntityScan("com.timewin.application.model")
/***/
public class AppConfig /**some extends***/{
}

Кстати, я считаю, что имя model не лучший выбор для пакета, который содержит сущности, потому что это имя действительно часто используется для хранения некоторых промежуточных / DTO / ввода-вывода POJO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...