Как решить org.springframework.core.convert.ConversionFailedException при извлечении данных из БД с использованием данных Spring jpa - PullRequest
0 голосов
/ 13 июля 2020

Классы домена

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "SAMPLE_DATA")
@TypeDefs({
        @TypeDef(name = "json", typeClass = JsonStringType.class),
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
public class Sample implements Serializable {

    private static final long serialVersionUID = 1719868663566734198L;

    @Id
    private Long Id;
    
    @Type(type = "json")
    @Column(columnDefinition = "json",name = "person")
    private Person personObj;
    private String sampledata;
    private String createdBy;

}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person implements Serializable {

    private static final long serialVersionUID = -5427425033242474312L;
    private String firstName;
    private String lastName;
    
}

Класс репозитория

@Repository
public interface SampleRepository extends JpaRepository<Sample, Long> {
   @Query(value = "select s.personObj,s.sampledata from     Sample s where s.Id=:Id")
List<Sample> findPersonById(Long Id);
}

Для сопоставления с сопоставлением JSON типы объектов, использующие

<dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-52</artifactId>
        <version>${hibernate-types.version}</version> 
 </dependency> 

когда я пытаюсь получить список объекта Sample, я получаю следующее исключение

org.springframework.core.convert.ConversionFailedException: Не удалось преобразовать из введите [java .lang.Object []], чтобы ввести [@ org.springframework.data.jpa.repository.Query com.domain.Sample] для значения '[Person (firstName = ab c, lastName = test) ] '; вложенное исключение - org.springframework.core.convert.ConverterNotFoundException: не найдено преобразователя, способного преобразовывать тип [com.domain.Person] в тип [@ org.springframework.data.jpa.repository.Query com.domain.Sample]. ........ Вызвано: org.springframework.core.convert.ConverterNotFoundException: не найден преобразователь, способный преобразовывать тип [com.domain.Person] в тип [@ org.springframework.data.jpa.repository. Запрос com.domain.Sample]

1 Ответ

0 голосов
/ 13 июля 2020

Вам не нужно выбирать отдельные столбцы. Вы должны выбрать Entity:

@Repository
public interface SampleRepository extends JpaRepository<Sample, Long> {

   @Query(value = "select s from Sample s where s.Id=:Id")
   List<Sample> findPersonById(Long Id);
}
...