Внедрение пользовательской реализации репозитория на уровне сервиса - PullRequest
0 голосов
/ 07 октября 2018

Я написал собственную реализацию JPA, используя Spring JPA документацию в качестве ссылки, и я хочу внедрить вышеупомянутую реализацию в сервисный уровень, но я не могу понять, что я делаю неправильно.Я также прошел через следующую документацию .Мое приложение является загрузочным приложением Spring.

В документации не говорится, как инициализировать мою реализацию пользовательского репозитория.Я пытался следовать следующим инструкциям .

Мой уровень обслуживания.

@Service
public class ProfileService implements IProfileService {

  @Autowired
  private IQuizRepository quizRepository;

  . . . . Some methods defined here. . . . 
}

Мой интерфейс JPA

@NoRepositoryBean
public interface IQuizRepository extends JpaRepository<Quiz, Long> {

  Quiz registerQuiz();

}

Класс бетона

public class QuizRepository extends SimpleJpaRepository<Quiz, Long> implements IQuizRepository {

 @PersistenceContext
 private EntityManager em;

 public QuizRepository(Class<Quiz> clazz, EntityManager em) {
   super(clazz, em);
 }

  /**
   * Initialises and returns a quiz attempt.
   */
  @Override     
  public Quiz registerQuiz() {
    String uniqueKey = UUID.randomUUID().toString().replaceAll("-", "");
    Quiz quiz = new Quiz();
    quiz.setQuizId(uniqueKey);
    Score score = new Score();
    quiz.setScore(score);
    score.setQuiz(quiz);
    this.save(quiz);
    return quiz;
  }

}

Когда я не аннотирую QuizRepository конкретный класс с помощью Repository, тогда я получаю следующую ошибку:

***************************
APPLICATION FAILED TO START
***************************

Description:

Field quizRepository in com.myproject.service.ProfileService required a bean of type 'com.myproject.repository.IQuizRepository' that could not be found.


Action:

Consider defining a bean of type 'com.myproject.repository.IQuizRepository' in your configuration.

Но когда я аннотирую QuizRepository с помощью @Repository, тогда я получаю следующую ошибку

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.myproject.repository.QuizRepository required a bean of type 'java.lang.Class' that could not be found.


Action:

Consider defining a bean of type 'java.lang.Class' in your configuration.

Мой проект имеет комбинацию интерфейсов JPA, унаследованных от репозитория JPA, и конкретных реализаций.

1 Ответ

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

Похоже, ваш конструктор должен иметь эти два точных параметра:

public QuizRepository(JpaEntityInformation<Quiz, Long> entityInformation, EntityManager entityManager) {
    super(entityInformation, entityManager);
    this.entityManager = entityManager;
}

вместо public QuizRepository(Class<Quiz> clazz, EntityManager entityManager)

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