#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