java.lang.ClassCastException: JobEntity не может быть приведен к JobExcerpt (используя Spring Data Projection) - PullRequest
0 голосов
/ 04 октября 2019

Использование проекций для получения определенных полей для класса Entity JobEntity с использованием JobExcerpt.

Класс JobEntity : https://pastebin.com/GPeQDiRp

JobExcerpt класс :

@Projection(
        name = "jobProjection",
        types = { JobEntity.class })
public interface JobExcerpt {
    Long getId();

    JobEntity.Status getStatus();

    List<BatchEntity> getBatches();

    Date getCreatedOn();

    Long getRetailerId();
}

Очень просто JobExcerptRepository class :

@RepositoryRestResource(excerptProjection = JobExcerpt.class)
public interface JobExcerptRepository extends JpaRepository<JobEntity, Long> {

    JobExcerpt findByIdAndRetailerId(Long jobId, Long retailerId);

}

Линиякод, на котором происходит сбой:

JobExcerpt jobExcerpt = jobExcerptRepository.findByIdAndRetailerId(jobId, retailerId);

Дело в том, что в этой строке кода нет видимых (приведенных) операторов, подобных. Оно не должно отображаться, верно?

Трассировка стека : https://pastebin.com/iNG8h5dn

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Если вы хотите получить конкретное поле с вашего домена. Тогда вы можете просто эти вещи.

// JobExcerpt.java

public interface JobExcerpt {

    Long getId();

    Status getStatus();

    List<BatchEntity> getBatches();

    Date getCreatedOn();

    Long getRetailerId();
}

//  JobExcerptRepository.java
@RepositoryRestResource(excerptProjection = JobExcerpt.class)
public interface JobExcerptRepository extends JpaRepository<JobEntity, Long> {

    JobExcerpt findByIdAndRetailerId(Long jobId, Long retailerId);

}
JobExcerpt jobExcerpt = jobExcerptRepository.findByIdAndRetailerId(jobId, retailerId)
0 голосов
/ 04 октября 2019

Кажется, вы снова запустили проекцию JobExcerpt. Вот почему вы получили ClassCastException. Так и должно быть.

@RepositoryRestResource(excerptProjection = JobExcerpt.class)
public interface JobExcerptRepository extends JpaRepository<JobEntity, Long> {

    JobEntity findByIdAndRetailerId(Long jobId, Long retailerId);

}
JobEntity jobEntity = jobExcerptRepository.findByIdAndRetailerId(jobId, retailerId);

...