Прокси-сервер Spring Data ClassCastException не может быть приведен к — findById

#java #hibernate #spring-data-jpa #entity

#java #спящий режим #spring-data-jpa #сущность

Вопрос:

У меня есть API, разработанный на Java с использованием Spring Boot и Spring Data. У меня ошибка ClassCastException, когда я пытаюсь получить один объект, используя метод findById (id) из JpaRepository

Полученное исключение:

 java.lang.ClassCastException: class com.sun.proxy.$Proxy83 cannot be cast to class package.repository.FAQRepository (com.sun.proxy.$Proxy83 and package.repository.FAQRepository are in unnamed module of loader 'app')
 

Я получил его, когда попытался вызвать JpaRepository.findById(id) Однако я получаю ту же ошибку в других местах, вызывающих другие методы spring-data-jpa, такие как reposory.save(Entity).

 FAQ faq = this.repository.findById(updateFAQ.getId()).orElseThrow(() -> new NotFoundEntityException("FAQ not found"));
 

Часто задаваемые вопросы:

 @Repository
public interface  FAQRepository extends GenericRepository<FAQ> {
    List<FAQ> findByOperative(Operative operative);
}
 

GenericRepository:

 @Repository
public interface GenericRepository<Entity extends GenericPersistentEntity> extends JpaRepository<Entity, Long> {
}
 

Моя сущность:

 @Entity
@Table(name = "faqs")
@Getter
@Setter
@SQLDelete(sql = "UPDATE faqs SET deleted_date=NOW() WHERE id=?")
public class FAQ extends GenericPersistentEntity {
    @Lob
    private String question;

    @Lob
    private String answer;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "operative_id")
    private Operative operative;
}
 

Сущность суперкласса:

 @MappedSuperclass
@Where(clause = "deleted_date is null")
public abstract class GenericPersistentEntity implements GenericPersistentInterface {
    @Getter
    @Setter
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "creation_date", nullable = false)
    private Date creationDate;

    @UpdateTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "last_update_date")
    private Date updateDate;

    @Column(name = "deleted_date")
    private Date deletedDate;
}
 

Любая помощь будет оценена. Спасибо.

Комментарии:

1. Как вы внедряете FAQRepository в свой проект? Spring явно создает прокси для другого интерфейса.

2. У меня есть аннотация @Autowired в моем GenericService (суперкласс FAQService) с переменной GenericType, указанной конкретным классом FAQService